Extraire le nom du fichier du chemin complet en C à l’aide de MSVS2005

Dans un programme C, j’ai un chemin de fichier dans une chaîne (plus précisément, il s’agit du nom exe stocké dans argv[0] ). Je voudrais extraire le nom du fichier et supprimer le chemin du répertoire à l’aide de MS Visual Studio 2005. Une fonction intégrée pour cela?

Pas vraiment, il suffit de localiser la dernière barre oblique inverse dans le chemin. Tout ce qui suit est le nom du fichier. Si rien ne se passe après cela, le chemin spécifie un nom de répertoire.

 // Returns filename portion of the given path // Returns empty ssortingng if path is directory char *GetFileName(const char *path) { char *filename = strrchr(path, '\\'); if (filename == NULL) filename = path; else filename++; return filename; } 

Pour référence, voici le code que j’ai implémenté, supposé être compatible Win / Unix:

  char *pfile; pfile = argv[0] + strlen(argv[0]); for (; pfile > argv[0]; pfile--) { if ((*pfile == '\\') || (*pfile == '/')) { pfile++; break; } } 

Si vous vouliez une fonction de la libc:

 #include  char * basename (const char *fname); 

Ceci est la version du poorman:

 char *p, *s = args[0]; // or any source pathname ... p = strchr(s, '\\'); // find the 1st occurence of '\\' or '/' // if found repeat the process (if not, s already has the ssortingng) while(p) { s = ++p; // shift forward s first, right after '\\' or '/' p = strchr(p, '\\'); // let p do the search again } // s now point to filename.ext ... 

remarque: pour _TCHAR , utilisez _tcschr plutôt que strchr

strchr est similaire à: while((*p) && (*p != '\\')) p++; avec safebelt NULL retourne si chr n’est pas trouvé. Donc, si vous n’aimez vraiment pas dépendre d’une autre bibliothèque, vous pouvez utiliser ceci:

 char *p, *s = args[0]; ... p = s; // assign to s to p while(*p && (*p != '\\')) p++; while(*p) { // here we have to peek at char value s = ++p; while (*p && (*p != '\\')) p++; } // s now point to filename.ext ... 

Si inférieur que cela, utilisez asm place ..