有效地列出目录中的所有子目录

use*_*747 6 c++ algorithm winapi file

请参阅编辑,并提供迄今为止的建议......

我试图使用WinAPI和C++列出给定目录中的所有目录(文件夹).

现在我的算法速度慢且效率低:
- 使用FindFirstFileEx()打开我正在搜索的文件夹
- 然后查看目录中的每个文件(使用FindNextFile()); 如果它是一个目录文件,那么我将其绝对路径存储在一个向量中,如果它只是一个文件我什么也不做.

这看起来非常低效,因为我正在查看目录中的每个文件.

  • 是否有一个我可以使用的WinAPI函数会告诉我给定目录中的所有子目录?
  • 您知道我可以使用哪种算法有效地定位和识别目录(文件夹)中的文件夹吗?

编辑: 所以在采取了我使用FindExSearchLimitToDirectories搜索的建议后,但对我来说它仍然打印出所有文件(.txt等)而不仅仅是文件夹.难道我做错了什么?

WIN32_FIND_DATA dirData;
HANDLE dir = FindFirstFileEx( "c:/users/soribo/desktop\\*", FindExInfoStandard, &dirData, 
                              FindExSearchLimitToDirectories, NULL, 0 );

while ( FindNextFile( dir, &dirData ) != 0 )
{
    printf( "FileName: %s\n", dirData.cFileName );
}
Run Code Online (Sandbox Code Playgroud)

Dem*_*cht 1

如果您使用FindFirstFileEx,那么您应该能够指定_FINDEX_SEARCH_OPS::FindExSearchLimitToDirectories选项(用作fSearchOp中的参数FindFirstFileEx)来限制对目录的第一次搜索(以及任何后续FindNextFile())调用。

  • “FindExSearchLimitToDirectories”仅供参考,因此它不能保证您只能获取目录;它只是对支持它的文件系统进行优化。 (3认同)