使用VB遍历文件夹内的所有文件,文件夹内没有子文件夹,内含的文件最多15万

1/因为用自带的文件操作控件最大只能到3万,所以现在想看有没有什么其他方法,
2/现在我尝试了dir函数在文件数少的时候是可以遍历的,当然自带的文件控件也可以,但是我在使用了dir函数得到了第一个满足要求的文件后,我针对这个文件做了很多的操作,包括根据文件内的内容,再在其他文件夹(不是遍历的文件夹)内新建文件,编辑文件内容等等新文件操作。当这些都操作完成后,我再次调用dir函数,可是他直接返回空字符串代表搜索完成,相当于跳转回来的时候,dir无论文件夹内满足要求的文件有多少,全部返回空字符串。
3/好像可以用filenext,filefirst这些,烦请指教!
4/最关键的是文件夹内文件数远超5万,一般的文件遍历方法不行。最好在最开始系统自己的卡顿(因为文件数太多)之后,所编写的软件不要再卡顿很长时间。

首先一个基本概念要先搞清楚:在FAT32文件系统中,一个文件夹内放的文件及子文件夹数量的上限是65534个(如果用了长文件名,这个数量会减少),而在NTFS文件系统中,这个值就变为4G-1即40多亿,几乎是无限了。你说的15万个文件的文件夹,那很显然是NTFS系统的。

其次,VB6是上世纪末出生的老古董软件,是32位的程序开发语言,它诞生的时候,FAT32是当时最常见也是最先进的文件系统,所以VB6也是按FAT32来操作文件的,再考虑到要兼容长文件名,所以VB6本身的控件和函数在一个文件夹中所能操作的文件数量限制是32767个(折半)。

因此,你这15万个文件的文件夹是无法用VB本身自带的控件或函数来遍历的,只能使用第三方控件或组件,比如大名鼎鼎的FSO:

Dim fso As Object, fd As Object, f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set fd = fso.GetFolder("要处理的文件夹全路径名写在这")
For Each f In fd.Files
    '这里是对遍历出的每个文件进行操作
    '其中f.Name是文件名,f.Path是文件路径,
    'f.Size是文件大小,f.Type是文件类型,等等
    '为了防止卡顿,可以在这个循环里用下面这行:
    'DoEvents
Next
Set fd = Nothing
Set fso = Nothing

我没测试,因为我没有这么多文件的文件夹。

如果这个方法也不行,那就只能用API了。

追问

谢谢,我先尝试一下,有疑问再请教你了!

温馨提示:答案为网友推荐,仅供参考
相似回答