代码之家  ›  专栏  ›  技术社区  ›  jpfollenius Rob Kennedy

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

  •  7
  • jpfollenius Rob Kennedy  · 技术社区  · 15 年前

    有没有一种方法(在Windows上使用Delphi2010)可以在不实际遍历所有文件的情况下获取目录中的文件数?

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

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

    2 回复  |  直到 15 年前
        1
  •  8
  •   Nick Hodges    15 年前

    我认为最快的方法是使用ioutils.pas中的tdirectory.getfiles方法。由于目录中(可见)文件的数量对于每个用户可能是不同的,所以只有很小的机会可以以某种方式检索到一个数字。

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

        2
  •  10
  •   frogb    15 年前

    如果您在Windows 7或Server 2008 R2上运行,我建议从sysutils中提取findfirst和findmatchingfile函数,并对前者进行黑客攻击以使用findfirstfileex而不是findfirstfile。然后可以将附加标志参数设置为2(在msdn中定义为 FIND_FIRST_EX_LARGE_FETCH )当此设置暂时处于(win32majorVersion=6)和(win32minorVersion>=1)条件下时。

    此设置会显著提高这些操作系统上的findFirst/findNext循环的速度。寻找 FindFirstFileEx 有关详细信息,请参阅msdn,因为Delphi帮助检索到的最新文档不在Microsoft文档中。

    tdirectory.getfiles最终似乎会调用findfirst,因此除了简化自己的代码外,它不会给您带来很多好处。