|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 5 ![]() |
Bonjour,
Je cherche un moyen de parcourir une arborescence (repertoire, liens et fichiers). Il me faut que ce soit POSIX donc je suis parti sur opendir et readdir. J'ai bien les noms (champs d_name) mais d'aprés le man si les fonction sont POSIX la structure dirent ne l'est pas entierement. Tous les champs (d_name exceptés) sont sans garanti. Ma question : Une fois que j'ai recupéré un nom comment puis-je faire pour savoir si c'est un rep ou un file ? Merci |
|
|
00
|
|
|
#2 |
![]() Inscription : mars 2004 Messages : 1 298 ![]() |
regarde le man 3 readdir, celle-ci est POSIX ....
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 5 ![]() |
Effectivement readdir est posix comme je l'ai ecrit dans mon post. Et d'ailleurs grace a cette fonction j'ai bien le nom des "elements" presents dans les repertoires, mais je n'ai que les noms de garanti.
Je viens juste de trouver ce qui me manque : stat. en fait en associant readdir, stat et les macro S_ISDIR/S_ISREG j'arrive à mon but. Voici un example de code au cas ou ca pourrait aider qqun. int main(int argc, char **argv) { DIR *CurrentDir = NULL; CurrentDir = opendir(argv[1]); if(CurrentDir != NULL) { struct dirent *Entrie = NULL; do { Entrie = readdir(CurrentDir); if(Entrie != NULL) { struct stat fileAttr; char *FullName; FullName = malloc(strlen(argv[1]) + strlen(Entrie->d_name) + 5); sprintf(FullName, "%s/%s", argv[1], Entrie->d_name); stat(FullName, &fileAttr); printf("-> %s (%s)", Entrie->d_name, FullName); printf(" directory = %s file = %s \n", (S_ISDIR(fileAttr.st_mode)) ? "yes" : "no", (S_ISREG(fileAttr.st_mode)) ? "yes" : "no"); free(FullName); } }while(Entrie != NULL); } else printf("Ca ne marche pas !!!\n"); return(0); } Merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com