Il y a basename() .
Nourrissez-le avec un chemin (sous la forme d'un char*
) et il vous renverra le nom de base (c'est-à-dire le nom du fichier/répertoire que vous voulez) sous la forme d'un autre char*
.
MODIFIER :
J'ai oublié de vous dire que la version POSIX de basename()
modifie son argument. Si vous voulez éviter cela, vous pouvez utiliser la version GNU de basename()
en ajoutant ceci dans votre source :
#define _GNU_SOURCE
#include <string.h>
En échange cette version de basename()
renverra une chaîne vide si vous l'alimentez avec, par ex. /usr/bin/
à cause de la barre oblique finale.
Vous voulez basename(), qui devrait être présent sur à peu près n'importe quel système POSIX :
http://www.opengroup.org/onlinepubs/000095399/functions/basename.html
#include <stdio.h>
#include <libgen.h>
int main() {
char name[] = "/foo/bar.txt";
printf("%s\n", basename(name));
return 0;
}
...
$ gcc test.c
$ ./a.out
bar.txt
$
#include <string.h>
char *basename(char const *path)
{
char *s = strrchr(path, '/');
if (!s)
return strdup(path);
else
return strdup(s + 1);
}