作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我找到了很多遍历目录树的例子,但我需要一些不同的东西。我需要一个带有某种方法的类,每次调用都从目录中返回一个文件并逐渐遍历目录树。请问我该怎么做?我正在使用函数 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/
我是一名优秀的程序员,十分优秀!