tipos listar libreria estructura ejemplo dirent directorios directorio crear archivos c windows directory-structure

c - listar - opendir readdir



Listado del contenido del directorio usando C y Windows (3)

Estoy buscando enumerar y almacenar el contenido de un directorio en una estructura usando C en Windows.

No necesariamente estoy buscando a alguien que escriba el código que estoy buscando, sino que me señale la dirección correcta en lo que respecta a qué biblioteca debería estar viendo.

He estado buscando en Google por algunas horas y todo lo que encuentro es C #, C ++ solutions, por lo que cualquier ayuda sería muy apreciada.


Como todos los demás dijeron (con FindFirstFile, FindNextFile y FindClose) ... ¡pero con recursión!

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 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 listar el contenido de los archivos, puede buscar en un directorio con estas API: FindFirstFileEx , CloseFind y CloseFind . Deberá #include <windows.h , que le dará acceso a la API de Windows. Son funciones C y tan compatibles con C ++. Si desea "específicamente C ++", intente buscar listados de directorios usando MFC.