【发布时间】:2023-10-14 05:44:01
【问题描述】:
我正在尝试查找所有目录中的所有文件,但我不知道如何处理子目录。在这段代码中,代码看起来穿过所有子目录,但我不知道如何跳回去。有谁知道怎么做?
__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搜索的位置。您可以使用相同的函数递归搜索子目录,或者您可以进行广度优先搜索,但保留需要搜索的目录队列(其中,当您遇到目录时,您只需将其推入队列) . -
你可能想提防“。”和“..”,因为它们倾向于(实际上将)导致无限枚举。