|
Dernière réponse | |
---|---|
Sujet : Liste de fichier en C | |
kaz ander | #ifdef COMPIL_MS // Microsoft only
#include <io.h> #elseif COMPIL_LINUX // Linux only #include <dirent.h> #endif . . . char* szDir[MAX_DIR_LEN]; // directory to be searched char* szFileName[MAX_FILE_NAME]; // can be used char* szSearchCriteria[MAX_LEN]; // search criteria #ifdef COMPIL_MS // Microsoft only struct _finddata_t FindResult; long hFileSearch; #elseif COMPIL_LINUX // Linux only DIR* pDir; struct dirent* pDirEntry; struct stat Status; #endif #ifdef COMPIL_MS // MICROSOFT compilation chdir(szDir); hFileSearch = _findfirst( SearchCriteria, &FindResult ); while ( _findnext( hFileSearch, &FindResult ) != -1 ) // search directory for matching files { printf("%s %ld\n", FindResult.name, FindResult.size); } _findclose( hFileSearch ); #elseif COMPIL_LINUX // LINUX compilation pDir = opendir(szDir); if (pDir == NULL) return FCT_RET_ERROR; for (pDirEntry = readdir(pDir); pDirEntry != NULL; pDirEntry = readdir(pDir)) // search directory for file entries { if (stat(pDirEntry->d_name, &Status) < 0) fprintf("File not found\n" ); else printf("%s %ld\n", szFileName = pDirEntry->d_name, Status.st_size); } #endif **************************************************** Si tu veux faire une recherche recursive, tu dois ajouter un test sur le FindResult.attrib = _A_SUBDIR sous MS, et sous Linux tu peux ajouter un stat(szFileName, &Status) (szFileName contenant le nom du fichier) et tester avec S_ISDIR(Status.st_mode) qui renverra 1 si l'entree est un repertoire. Et pis remplace les printf() par ce que tu veux pour construire ta liste (ecriture dans un fichier, dans un tableau en memoire, etc) Vala je pense que ca devrait suffir :) [edtdd]--Message édité par Kaz Ander--[/edtdd] |
Vue Rapide de la discussion |
---|