Listado de contenido del directorio usando C y Windows

Estoy buscando listar y almacenar los contenidos de un directorio en una estructura usando C en Windows.

No necesariamente busco a nadie para que escriba el código que estoy buscando, sino que me señala en la dirección correcta cuando se trata de qué biblioteca debería estar mirando.

He estado buscando en Google durante unas horas y todo lo que encuentro son soluciones C #, C ++, por lo que cualquier ayuda sería muy apreciada.

Como todos los demás dijeron (con FindFirstFile, FindNextFile y FindClose) … ¡pero con recursividad!

bool ListDirectoryContents(const char *sDir) { WIN32_FIND_DATA fdFile; HANDLE hFind = NULL; char sPath[2048]; //Specify a file mask. *.* = We want everything! sprintf(sPath, "%s\\*.*", sDir); if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE) { printf("Path not found: [%s]\n", sDir); return false; } do { //Find first file will always return "." // and ".." as the first two directories. if(strcmp(fdFile.cFileName, ".") != 0 && strcmp(fdFile.cFileName, "..") != 0) { //Build up our file path using the passed in // [sDir] and the file/foldername we just found: sprintf(sPath, "%s\\%s", sDir, fdFile.cFileName); //Is the entity a File or Folder? if(fdFile.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY) { printf("Directory: %s\n", sPath); ListDirectoryContents(sPath); //Recursion, I love it! } else{ printf("File: %s\n", sPath); } } } while(FindNextFile(hFind, &fdFile)); //Find the next file. FindClose(hFind); //Always, Always, clean things up! return true; } ListDirectoryContents("C:\\Windows\\"); 

Y ahora su contraparte de UNICODE:

 bool ListDirectoryContents(const wchar_t *sDir) { WIN32_FIND_DATA fdFile; HANDLE hFind = NULL; wchar_t sPath[2048]; //Specify a file mask. *.* = We want everything! wsprintf(sPath, L"%s\\*.*", sDir); if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE) { wprintf(L"Path not found: [%s]\n", sDir); return false; } do { //Find first file will always return "." // and ".." as the first two directories. if(wcscmp(fdFile.cFileName, L".") != 0 && wcscmp(fdFile.cFileName, L"..") != 0) { //Build up our file path using the passed in // [sDir] and the file/foldername we just found: wsprintf(sPath, L"%s\\%s", sDir, fdFile.cFileName); //Is the entity a File or Folder? if(fdFile.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY) { wprintf(L"Directory: %s\n", sPath); ListDirectoryContents(sPath); //Recursion, I love it! } else{ wprintf(L"File: %s\n", sPath); } } } while(FindNextFile(hFind, &fdFile)); //Find the next file. FindClose(hFind); //Always, Always, clean things up! return true; } ListDirectoryContents(L"C:\\Windows\\"); 

Para enumerar los contenidos del archivo, puede buscar en un directorio con estas API: FindFirstFileEx , FindNextFile y CloseFind . Necesitarás #include , eso te permitirá acceder a la API de Windows. Son funciones C y son tan compatibles con C ++. Si desea "específicamente C ++", intente buscar directorios de listados utilizando MFC.

Probablemente estás buscando estas funciones.

FindFirstFile :

FindNextFile :

FindClose :