有没有办法(在使用 Delphi 2010 的 Windows 上)在不实际遍历所有文件的情况下获取目录中的文件数?
我想在某些文件系统索引操作期间实现一个进度条。出于这个原因,我需要知道目录中有多少文件。
获取目录中文件数量的最快方法是什么?
有没有办法(在使用 Delphi 2010 的 Windows 上)在不实际遍历所有文件的情况下获取目录中的文件数?
我想在某些文件系统索引操作期间实现一个进度条。出于这个原因,我需要知道目录中有多少文件。
获取目录中文件数量的最快方法是什么?
如果您在 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 方法(包含在上述方法中)实际上并不遍历文件,它只遍历表中的条目,因此它可能比预期的要快。