繁体   English   中英

使用C ++比使用FindFirstFile / FindNextFile枚举文件夹有更快的替代方法吗?

[英]Is there a faster alternative to enumerating folders than FindFirstFile/FindNextFile with C++?

我需要获取文件夹中的子文件夹的所有路径(使用WinAPI和C ++。)到目前为止,我找到的唯一解决方案是递归调用FindFirstFile / FindNextFile,但是在具有更深层次结构的文件夹上执行此操作需要花费大量时间。

所以我想知道,只是为了得到文件夹名称,有更快的方法吗?

如果你真的只需要子文件夹,你应该能够使用FindFirstFileEx搜索选项来过滤掉非目录。

文档建议这只是一个咨询标志,但您的文件系统可能支持此优化 - 尝试一下。

FindExSearchLimitToDirectories

这是一个咨询标志。 如果文件系统支持目录过滤,则该函数将搜索与指定名称匹配的文件,并且也是目录。 如果文件系统不支持目录过滤,则会以静默方式忽略此标志。

这是您遇到的最快的方法。 您也可以考虑使用另一个线程来管理目录枚举,因为它需要花费很多时间。 如果目录中有很多子文件夹/文件,即使是Microsoft文件浏览器也要花一些时间。

这里还有一件事是你可以枚举一次目录,然后注册任何更新。 所以枚举文件夹的成本应该只在启动时进行一次。

更快的方法是绕过FindFirstFile...() API并直接直接进入文件系统。 您可以将DeviceIoControl()FSCTL_ENUM_USN_DATA控件一起使用来访问主文件表,至少在NTFS格式化的卷上。 有了这些信息,您就可以直接访问文件/文件夹的记录,其中包括它们的属性,父信息等。是的,它会更有效,但它也应该更快,因为您可以优化代码来访问这些部分你需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM