我想知道关于FindFirstFile和下面的第一个FindNextFile。是真的吗,FindFirstFile总是能找到'.‘(当前文件夹)和下面的FindNextFile总是‘.’(父文件夹)?当然,面具是“*”。我想要加速一些文件列表,我能写点东西吗,比如:
h := FindFirstFile('path\*' ...) // it finds '.', not process
if h = INVALID_HANDLE_VALUE then ... // some error handling, of course
FindNextFile(...) // skipping '..', I suppose, if '.' has found,
// '..' will be too, no handle validity check
while FindNextFile(...) do
// file/folder processing begins here所以我不需要检查。还有“..”每个周期的文件名。对不起语法,我想,我是可以理解的,我的英语,如果我犯了错误。
发布于 2016-10-13 06:50:29
根本不能保证前两个条目是'. '和'..'。所以你的建议代码不能被使用。
我想,您可以在布尔值中跟踪是否见过这两个条目,如果是这样的话,可以跳过检查。
但是,检查这些值并不是瓶颈。枚举目录需要访问磁盘和系统调用。这就是瓶颈。对这些项进行优化检查的任何尝试都会混淆您的代码,并且不会产生明显的性能效益。
发布于 2016-10-13 13:00:46
谢谢你的回答。我的爱好之一是找到最好的解决方案,算法在简短的基本代码,(如果需要,直到组装级)。在我的实践中,这似乎是真的,我经历过。但是没有找到任何关于它的文档,我想,它取决于Find*File的内部行为和硬盘的数据结构。所以我才问。再次感谢。
乔纳森:我真的和FindFirstFileEx一起使用了FIND_FIRST_EX_LARGE_FETCH,不像在示例代码中那样:)我认为使用Ex与否在这个问题上是不相关的。
IInspectable:你说得对,我不想陷入MFT :)
我不会使用这种形式的代码。正如David所建议的那样,我将使用一个变量,但是一个整数类型从2开始计数,如果计数器达到0,则不再需要检查名称。
https://stackoverflow.com/questions/40008737
复制相似问题