【发布时间】:2009-10-30 10:16:51
【问题描述】:
有没有办法(在使用 Delphi 2010 的 Windows 上)在不实际遍历所有文件的情况下获取目录中的文件数?
我想在一些文件系统索引操作期间实现一个进度条。因此,我需要知道目录中有多少文件。
获取目录中文件数量的最快方法是什么?
【问题讨论】:
标签: windows delphi filesystems delphi-2010
有没有办法(在使用 Delphi 2010 的 Windows 上)在不实际遍历所有文件的情况下获取目录中的文件数?
我想在一些文件系统索引操作期间实现一个进度条。因此,我需要知道目录中有多少文件。
获取目录中文件数量的最快方法是什么?
【问题讨论】:
标签: windows delphi filesystems delphi-2010
如果您在 Windows 7 或 Server 2008 R2 上运行,我建议从 SysUtils 中提取 FindFirst 和 FindMatchingFile 函数并破解前者以使用 FindFirstFileEx 而不是 FindFirstFile。然后您可以将附加标志参数设置为 2(在 MSDN 中定义为 FIND_FIRST_EX_LARGE_FETCH),此设置暂时以 (Win32majorversion = 6) 和 (Win32minorversion >= 1) 为条件。
此设置会显着提高这些操作系统上 FindFirst/FindNext 循环的速度。在 MSDN 上查找 FindFirstFileEx 了解更多详细信息,因为 Delphi 帮助检索到的 Microsoft 文档中没有最新文档。
TDirectory.GetFiles 最终似乎调用 FindFirst,因此除了简化您自己的代码之外不会给您带来太多好处。
【讨论】:
我认为最快的方法是使用位于 IOutils.pas 中的 TDirectory.GetFiles 方法。由于每个用户的目录中(可见)文件的数量可能不同,因此只能以某种方式检索一个数字的可能性很小。
FindFirst/FindNext 方法(包含在上述方法中)实际上并不遍历文件,它只遍历表中的条目,因此它可能比预期的要快。
【讨论】: