【问题标题】:How can I efficiently retrieve the number of files in a directory?如何有效地检索目录中的文件数?
【发布时间】:2009-10-30 10:16:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows delphi filesystems delphi-2010


    【解决方案1】:

    如果您在 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,因此除了简化您自己的代码之外不会给您带来太多好处。

    【讨论】:

    • 您也可以使用 FindExInfoBasic 信息级别,它会停用旧短文件名的检索
    【解决方案2】:

    我认为最快的方法是使用位于 IOutils.pas 中的 TDirectory.GetFiles 方法。由于每个用户的目录中(可见)文件的数量可能不同,因此只能以某种方式检索一个数字的可能性很小。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 2018-05-02
      • 1970-01-01
      • 2021-08-28
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多