vb6.0怎样遍历一个指定文件夹?

vb6.0怎样遍历一个指定文件夹?,第1张

 sPath是所查找的文件的路径,list是返回的文件列表

Public Function GetAllFiles(ByVal sPath As String, list As Collection)

Dim item As String

Dim oPaths As New Collection

item = Dir(sPath, vbDirectory)

While Len(item) >0

If item <>"." And item <>".." Then

If (GetAttr(FullPathName(sPath) &item) And vbDirectory) = vbDirectory Then

oPaths.Add item

Else

If IsModelFile(item) Then list.Add sPath &item

End If

End If

item = Dir

Wend

Dim p

For Each p In oPaths

Call GetAllFiles(Combin(sPath, p), list)

Next

End Function

首先一个基本概念要先搞清楚:在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了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11952306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存