VB 如何遍历文件夹下所有文件,高手请指教

VB 如何遍历文件夹下所有文件,高手请指教,第1张

窗体上有四个控件,命令按钮command1。列表框list1。驱动器列表Drive1。文件夹列表Dir1。

驱动器和文件夹列表是用来选择你想要搜索的文件夹。

程如运序运行时选中你想要搜索的文件夹,单击搜虚扰索按钮。该文件夹下面所有的文件及子文件夹里面的文件都列到列表框中。

将代码差橡旦复制到窗体即可。代码如下:

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 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了。

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

-


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存