Delphi,如何快速统计文件夹下文件数量,包括子文件夹

独醒子 2011-09-06 09:19:37
我需要知道,一个文件夹(包括子文件夹)中的 *.jpg 以及 *.jpeg 文件的数量(扩展名不区分大小写)。
如不能区分扩展名,统计所有文件数量也可以。

另 这个方法是否可以统计文件夹及子文件夹的数量?

不用遍历文件夹的方法。那种循环递归速度太慢了。
因为我的文件至少有几万个。

万分感谢 麻烦给出详细代码。!!!
...全文
1687 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
无条件为你 2011-09-06
  • 打赏
  • 举报
回复
楼主,你可以遍历文件夹的时候,每遇到一个文件夹就创建一个线程,在线程中统计文件数量,这样速度会极快!具体楼就请自己熟悉下多线程编程。另外就是给40分的贴子实在太少了,你结贴时系统还返给你20分,而你发贴还被奖励10分。
Terony 2011-09-06
  • 打赏
  • 举报
回复
还有一点忘了说了,上面的实例中,mmoFiles是用来显示检索到的文件的一个TMemo组件,楼主自行添加就好了。
Terony 2011-09-06
  • 打赏
  • 举报
回复
楼主可以使用Delphi中新增的 IOUtils 单元来完成文件遍历。
首先添加 IOUtils 单元和 Types 单元;
示例代码如下:
指定一个测试目录,楼主可以换成你自己指定的目录,
const
aimDir = 'D:\MyPctures';

获取指定目录及其子目录下所有指定类型的文件
var
dir: TDirectory;
files: TStringDynArray;//需要 Types 单元支持
str: string;
begin
files := dir.GetFiles(aimDir, '*.jpg', TSearchOption.soAllDirectories);
mmoFiles.Clear;
for str in files do
mmoFiles.Lines.Add(str);
end;
该检索方式速度比传统的遍历要快,且支持通配符。
独醒子 2011-09-06
  • 打赏
  • 举报
回复
之前看到有人好像是用一个api函数将文件放到一个列表控件内。然后通过items.count获得数量,速度非常快。

我自己也想到,通过调用dos命令 dir *.jpg /s>>a.txt 后把通过dos命令管道方式建立a.txt文件打开读取最后两行内容。 可速度还是不能满意。

遍历的话 我试过,够慢的,导致我程序执行时 要等好一会才能显示界面。。
风车呼噜噜 2011-09-06
  • 打赏
  • 举报
回复
没用过其他方法,递归遍历还行吧,关注。
浩南_哥 2011-09-06
  • 打赏
  • 举报
回复
貌似只有遍历这个方法
独醒子 2011-09-06
  • 打赏
  • 举报
回复
最怕开线程了,这搞得复杂了。

我在想,无论你一个硬盘分区里 有几万个 几十万个文件。
所有文件的资料在硬盘分区表里都有。
是否可以读取文件分区表
然后查询出数量呢?

想想而已,这玩意我不会读。
不知道这个方法可行不?大家说说。

5,913

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧