#include <dirent.h>
int scandir( const char * dir, struct dirent *** namelist, int (*sel)(const struct dirent *), int (*compar)(const struct dirent **, const struct dirent **) );
La fonction scandir lit les entrées d'un dossier et construit un tableau de pointeurs vers des structures struct dirent. Elle peut aussi filtrer les entrées et les trier.
NULL pour tout conserver.NULL pour ne pas imposer de tri.En cas de succès, la fonction renvoie le nombre d'entrées placées dans namelist. En cas d'erreur, elle renvoie -1 et positionne errno.
scandir, ainsi que le tableau lui-même, doivent être libérés avec free.
Le programme suivant charge les entrées du dossier courant, ignore les noms commençant par un point, puis trie les résultats avec alphasort.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#define _POSIX_C_SOURCE 200809L #include <dirent.h> #include <stdio.h> #include <stdlib.h> static int visibleOnly(const struct dirent * entry) { return entry->d_name[0] != '.'; } int main(void) { struct dirent ** entries = NULL; int count = scandir(".", &entries, visibleOnly, alphasort); if (count == -1) { perror("scandir"); return EXIT_FAILURE; } for (int i = 0; i < count; ++i) { puts(entries[i]->d_name); free(entries[i]); } free(entries); return EXIT_SUCCESS; } |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :