驱动器和文件夹列表是用来选择你想要搜索的文件夹。
程如运序运行时选中你想要搜索的文件夹,单击搜虚扰索按钮。该文件夹下面所有的文件及子文件夹里面的文件都列到列表框中。
将代码差橡旦复制到窗体即可。代码如下:
Private Sub Command1_Click()
List1.Clear
sosuofile (Dir1.List(Dir1.ListIndex))
MsgBox "搜索完毕!,共找到" + Str(List1.ListCount) + "条记录。", vbOKOnly + vbExclamation, "提示"
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Sub sosuofile(MyPath As String)
Dim Myname As String
Dim dir_i() As String
Dim i, idir As Long
If Right(MyPath, 1) <>"\\" Then MyPath = MyPath + "\\"
Myname = Dir(MyPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)
Do While Myname <>""
If Myname <>"." And Myname <>".." Then
If (GetAttr(MyPath &Myname) And vbDirectory) = vbDirectory Then '如果找到的是目录
idir = idir + 1
ReDim Preserve dir_i(idir) As String
dir_i(idir - 1) = Myname
Else: List1.AddItem "" &MyPath &" " &Myname '把找到的文件显示到列表框中
End If
End If
Myname = Dir '搜索下一项
Loop
For i = 0 To idir - 1
Call sosuofile(MyPath + dir_i(i))
Next i
ReDim dir_i(0) As String
End Sub
Private Sub Form_Load()
Command1.Caption = "搜索"
End Sub
首先一个基本概念要先搞清楚:在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 ObjectSet 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了。
Dim fso As Object, fd As Object, f As ObjectSet 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
-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)