如何有效地检索目录中的文件数?

时间:2009-10-30 10:16:51

标签: windows delphi filesystems delphi-2010

有没有办法(在使用Delphi 2010的Windows上)获取文件中的文件数而不实际遍历所有文件?

我想在某些文件系统索引操作期间实现进度条。出于这个原因,我需要知道目录中有多少文件。

获取目录中文件数量的最快方法是什么?

2 个答案:

答案 0 :(得分:11)

如果您在Windows 7或Server 2008 R2上运行,我建议从SysUtils中提取FindFirst和FindMatchingFile函数,并修改前者以使用FindFirstFileEx而不是FindFirstFile。然后,您可以将附加flags参数设置为2(在MSDN中定义为FIND_FIRST_EX_LARGE_FETCH),此设置暂时以(Win32majorversion = 6)和(Win32minorversion> = 1)为条件。

此设置会在这些操作系统上为FindFirst / FindNext循环产生非常显着的速度提升。在MSDN上查找FindFirstFileEx以获取更多详细信息,因为最新文档不在Delphi帮助检索的Microsoft文档中。

TDirectory.GetFiles最终似乎调用了FindFirst,因此除了简化自己的代码之外,不会给你带来太大的好处。

答案 1 :(得分:8)

我认为最快的方法是使用位于IOutils.pas中的TDirectory.GetFiles方法。由于目录中(可见)文件的数量可能因每个用户而异,因此只有很少的机会只能以某种方式检索。

FindFirst / FindNext方法(包含在上面的方法中)实际上并不遍历文件,它只遍历表中的条目,因此它可能比预期的更快。