Extraire à partir d'un chemin complet de fichier seulement le nom ... ?

julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007 - 17 févr. 2006 à 11:19
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007 - 17 févr. 2006 à 13:09
Bonjour tout le monde

donc la question est pas compliqué je pense, j'ai un chemin du style " C:\temp\file.cpp", et je veux juste "file"
Je suppose que ca doit pas etre bien compliqué, en tout cas sur les sources données ici j'ai rien trouvé de très convaincant. J'ai essayé de le faire moi meme en reprennant le modèle d'une source qui retirait juste le répertoire, mais sans grand succès...

en gros, existerait-il une fonction, dans l'API, ou autre part ? Ou encore faite si gentillement par vous ?

Merci

10 réponses

BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
17 févr. 2006 à 11:35
Tu pars de la fin de ta chaine de caractères et tu rechercher un point "."
Ensuite, tu continue à remonter jusqu'au slash ""
Le nom de ton fichier est compris entre les 2 pointeurs.

Ceci est la méthode générale. Quel langage utilises-tu?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 févr. 2006 à 11:50
Le C++, ou C, enfin je n'y vois pas de différence, ici en tout cas ; et je code sous Dev-C++

J'ai essayé une fonction que voici :

char * ExtractFileName(char * szFileName)
{
char buf[264];
char *c, *b;
c = szFileName;
b = buf;

while(*c != '.')c++;
if(*c == '.')
{
while(*c != '\\')c--;
if(*c == '\\')
{
c++;
while(*b = *c){c++; b++;}
while(*b != '.') b--;
*b = 0;
}
}
cout << buf << endl;
return buf;
}

Elle marche, ou du moins, la ligne en rouge marche, mais à l'intérieur de la fonction seulement. Dés que j'essaie de retourner la valeur du buffer, soit ca m'affiche un as de pique (??), soit la première ligne si je change :
char * ExtractFileName(char * szFileName) en char ExtractFileName(char * szFileName)
et : return buf; en return * buf;

Je ne comprends pas bien ces changements je l'avoue, j'ai juste bidouiller pour voir si ca marche, mais non...
Alors comment faire pour retourner le buffer ? Je ne pense pas qu'il y ait d'erreurs dans mon code
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
17 févr. 2006 à 11:58
char buf[264];

buf n'est plus valide quand la fonction se termine.

soit tu met en static soit tu alloue avec malloc.
0
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
17 févr. 2006 à 12:02
Je préfère la méthode de passer la chaine de retour en paramètres:
void ExtractFileName(char * path, char * file);

en ayant pris soin d'allouer file avant d'entrer dans la fonction

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 févr. 2006 à 12:06
Et aussi, c'est normal que le compilateur me signal l'erreur "Missing terminating ' character" quand je mets :

while(*c != '\')c--;
if(*c == '\')

au lieu de :

while(*c != '\\')c--;
if(*c == '\\')

?
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
17 févr. 2006 à 12:09
'\' est carac d'échappement, faut le doubler

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 févr. 2006 à 12:13
Oui en static ca marche, merci beaucoup ! Montenant pour mon histoire slashes s'il vous plait ? sans trop vous bruscer bien sur hein
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 févr. 2006 à 12:16
J'avais pas vu ta réponse BruNews dsl, oui je l'ai fait doubler, mais est-ce normal que le chemin complet de mon fichier doit lui aussi avoir à chaque fois des double slashe ?
comme ca :
"C:\\mes docs\\musique\\machin.mmm"
et que ca bugge quand je n'en met qu'un chaque fois ?
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
17 févr. 2006 à 12:20
Toujours doublé dans une constante, c'est un caractère d'échappement comme dit plus haut.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 févr. 2006 à 13:09
Donc tout va bien, merci :)
0
Rejoignez-nous