gpt4 book ai didi

c++ - 如何逐步遍历目录树?

转载 作者:可可西里 更新时间:2023-11-01 09:47:39 25 4
gpt4 key购买 nike

我找到了很多遍历目录树的例子,但我需要一些不同的东西。我需要一个带有某种方法的类,每次调用都从目录中返回一个文件并逐渐遍历目录树。请问我该怎么做?我正在使用函数 FindFirstFile、FindNextFile 和 FindClose,我是 C++ 的新手。我有这样的东西......

例如我有这个简单的目录树

Parent(folder)\
file1.txt
file2.txt
Child(folder)\
file3.txt
file4.txt

我需要一个带有方法的类,例如 getNextFile(),第一次调用返回 file1.txt;第二次调用返回 file2.txt,第三次调用返回 Child(folder),第四次调用返回 file3.txt 等等...

编辑重复标志:我基本上需要在没有 do/while、while 或 for 的情况下遍历树...我需要某种迭代器,它可以存储以备后用,并且可以在我中断时从上一个文件继续浏览,但理想情况下仅使用 winapi 调用

WIN32_FIND_DATA fdFile;
HANDLE hFind = NULL;
if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE)
{
return false;
}
do
{
//do some job with fdFile
}
while(FindNextFile(hFind, &fdFile));

最佳答案

以下是在 Windows 平台上执行此操作的 native C++ 方法(使用 MFC 框架):

void ListFiles(const CString& sPath)
{
CFileFind finder;

CString sWildcard(sPath);
sWildcard += _T("\\*.*");

BOOL bWorking = finder.FindFile(sWildcard);

while (bWorking)
{
bWorking = finder.FindNextFile();

if (finder.IsDots())
continue;

if (finder.IsDirectory())
{
CString sFilePath = finder.GetFilePath();
// TODO: do stuff here
ListFiles(sFilePath);
}
}

finder.Close();
}

您可以更改通配符字符串以针对特定文件,例如 *.txt 等。您也可以将其作为参数传递给此函数以使其更通用。

关于c++ - 如何逐步遍历目录树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com