【发布时间】:2011-02-24 12:06:01
【问题描述】:
我想使用 Windows API 中提供的 FindFirstFile 方法读取给定文件夹(文件夹路径)中的所有文件。目前我只成功地读取了给定文件夹中的文件。我无法读取子文件夹中的文件。谁能帮我做这个??
【问题讨论】:
我想使用 Windows API 中提供的 FindFirstFile 方法读取给定文件夹(文件夹路径)中的所有文件。目前我只成功地读取了给定文件夹中的文件。我无法读取子文件夹中的文件。谁能帮我做这个??
【问题讨论】:
当您调用FindFirstFile/FindNextFile 时,它返回的一些“文件”实际上是目录。
您可以通过查看返回给您的WIN32_FIND_DATA 结构的dwFileAttributes 字段来检查某个内容是否为目录。
如果您找到一个目录,那么您可以简单地递归调用您的文件查找函数以进入子文件夹。
注意:确保为 . 和 .. 伪目录添加特殊情况,否则您的函数将递归到自身中,您将获得堆栈溢出
如果您还没有找到它,这里是文档:
possible values for dwFileAttributes(记住这些都是位标志,所以你必须使用 & 来检查)
【讨论】:
看看这个来自 MSDN 的 example 使用 CFileFind。
【讨论】:
或者,您可以使用boost::filesystem,它不仅可以为您提供干净的 API,还可以使您的代码在所有支持的平台上可移植。
【讨论】:
我已经使用此代码读取了指定目录中的文件。
CFileFind finder;
BOOL bWorking = finder.FindFile( directory );
while( bWorking )
{
bWorking = finder.FindNextFile();
}//end while
【讨论】: