我正在寻找列出并存储一个目录的内容在Windows上使用C结构。
我不一定要找任何人写出我正在查找的代码,而是指出我应该关注哪个库。
我一直在谷歌search了几个小时,所有我find的是C#,C ++解决scheme,所以任何帮助将不胜感激。
就像其他人所说(与FindFirstFile,FindNextFile和FindClose)…但递归!
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\\");
现在它的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\\");
要列出文件内容,您可以使用这些API搜索目录: FindFirstFileEx , FindNextFile和CloseFind 。 你需要#include <windows.h
,这将让你访问Windows API。 它们是C函数,与C ++兼容。 如果你想“特别是C ++”,尝试使用MFC搜索列表目录。
可能你正在寻找这些功能。
FindFirstFile :
FindNextFile :
FindClose :