我需要获取文件夹中子文件夹的所有路径(使用WinAPI和C ++。)到目前为止,我找到的唯一解决方案是递归调用FindFirstFile / FindNextFile,但需要大量的是时候在具有更深层次结构的文件夹上执行此操作。
所以我想知道,只是为了获取文件夹名称,是否有更快的方法?
答案 0 :(得分:4)
如果你真的只需要子文件夹,你应该可以使用FindFirstFileEx
search options过滤掉非目录。
文档建议这只是一个咨询标志,但您的文件系统可能支持此优化 - 尝试一下。
FindExSearchLimitToDirectories
这是一个咨询标志。如果是文件 系统支持目录过滤,该功能搜索文件 与指定的名称匹配,也是一个目录。如果是文件 系统不支持目录过滤,这个标志是静默的 忽略。
答案 1 :(得分:2)
这是您遇到的最快的方法。您也可以考虑使用另一个线程来管理目录枚举,因为它需要花费很多时间。如果目录中有很多子文件夹/文件,甚至Microsoft文件浏览器都会花一些时间。
此处还有一件事是您可以枚举目录一次,然后注册任何更新。所以枚举文件夹的成本应该只在启动时进行一次。
答案 2 :(得分:2)
更快的方法是绕过FindFirstFile...()
API并直接转到文件系统。您可以使用DeviceIoControl()
和FSCTL_ENUM_USN_DATA
控件来访问主文件表,至少在NTFS格式化卷上。有了这些信息,您就可以直接访问文件/文件夹的记录,其中包括它们的属性,父信息等。是的,它会更有效,但它也应该更快,因为您可以优化代码来访问这些部分你需要。