我正在嘗試查找所有目錄中的所有文件,但我不知道如何處理子目錄。在這段代碼中,代碼看起來遍歷所有的子代,但我不知道如何跳回來。有誰知道如何做到這一點?在C++中查找所有目錄中的所有文件
__declspec(dllexport) void GetFiles(char* filedir, char* path)
{
string s[1000];
string path2 = path;
UINT index = 0;
WIN32_FIND_DATA ffd;
TCHAR szDir[MAX_PATH];
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError=0;
StringCchCopy(szDir, MAX_PATH, filedir);
if (INVALID_HANDLE_VALUE == hFind)
return;
do
{
DWORD attributes = ffd.dwFileAttributes;
if (attributes & FILE_ATTRIBUTE_HIDDEN)
continue;
else if (attributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR dir2[MAX_PATH];
path2 = path;
path2 += ffd.cFileName;
path2 += "\\*";
StringCchCopy(dir2, MAX_PATH, path2.c_str());
SetCurrentDirectory(dir2);
}
else
{
s[index] = path;
s[index] += ffd.cFileName;
index++;
}
}
while (FindNextFile(hFind, &ffd) >= 0); // needs to jump back if zero
FindClose(hFind);
}
編輯:功能有哪些困惑編譯
只要更改當前目錄,將不會更改「FindFirstFile」和「FindNextFile」搜索的位置。您可以通過遞歸地使用相同的函數來搜索子目錄,也可以先執行廣度優先搜索,但保留需要搜索的目錄隊列(其中,當遇到目錄時,只需將其推入隊列中) 。 –
你可能想要防範「。」和「..」,因爲他們傾向於(實際上*將*)導致無限枚舉。 – WhozCraig