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

标签 c++ windows winapi directory-walk

我找到了很多遍历目录树的例子,但我需要一些不同的东西。我需要一个带有某种方法的类,每次调用都从目录中返回一个文件并逐渐遍历目录树。请问我该怎么做?我正在使用函数 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/

相关文章:

c++ - 将 glm::mat4 与模板类一起使用,比较 typedef

python - 无法获得超过 ~15 FPS 的 OpenCV 3.1 FPS

c++ - 将成员函数作为参数传递给优化器(将成员函数传递给函数)

c++ - 如何在 DirectWrite 中使用默认 UI 字体绘制文本?

c++ - 请求从 到非标量类型的转换

java - 使用java时在windows上获取 '~'的短路径

windows - 运行安全文件然后将其删除的脚本

java - 我如何检查远程机器是否启动?

java - 32 位 JRE 中的 jna 指针

windows - 当文件禁用读取共享时如何使用 ReadFile 读取数据