我用VB6.0编程,我需要读取一个目录,这个目录(路径)显示在文本框中(text1.text),类似:D:\DICOMFILE\20250104\111\222,在222文件夹后可能存在多级目录,(如222文件夹下存在333文件夹,333文件夹下存在444、555、666文件夹),总之在最后一级文件夹中存放数量不等的.dcm文件。窗体中有一个ListView1控件,第一列:编号,第二列:最后一个子文件夹路径,第三列,最后一个子文件夹中dcm文件数量。点击按钮时,在ListView1中显示对应的数据信息。
运行代码后,总是在函数的这里: TraverseFoldersAndFillListView (subFolder),提示需要对象
这是代码顶端(是vb6.0,不是vb.net,代码块里没有vb6.0的选项):
Dim fso As Object
这是按钮:
Private Sub Command1_Click()
Dim folderPath As String
Dim startFolder As Object
Dim subFolder As Object
Dim file As Object
Dim dcmCount As Long
Dim lastSubFolder As String
Dim listItem As listItem
' 从文本框中获取文件夹路径
folderPath = Text1.Text
' 检查路径是否存在
If Not fso.FolderExists(folderPath) Then
MsgBox "指定的文件夹路径不存在,请检查并重试。", vbExclamation
Exit Sub
End If
' 获取起始文件夹对象
Set startFolder = fso.GetFolder(folderPath)
' 清空 ListView 控件
ListView1.ListItems.Clear
' 调用递归函数来遍历文件夹并填充 ListView
Call TraverseFoldersAndFillListView(startFolder)
End Sub
这是函数:
Private Sub TraverseFoldersAndFillListView(ByVal folder As Object)
Dim subFolder As Object
Dim file As Object
Dim dcmCount As Long
' 遍历当前文件夹中的每个子文件夹
For Each subFolder In folder.SubFolders
dcmCount = 0
' 检查是否是最后一级文件夹(即没有子文件夹)
If subFolder.SubFolders.Count = 0 Then
' 遍历子文件夹中的每个文件
For Each file In subFolder.Files
' 检查文件扩展名是否为.dcm
If fso.GetExtensionName(file.Path) = "dcm" Then
dcmCount = dcmCount + 1
End If
Next file
' 如果是最后一级文件夹且有.dcm文件,则添加到 ListView
If dcmCount > 0 Then
Dim listItem As listItem
Set listItem = ListView1.ListItems.Add()
listItem.SubItems(1) = CStr(ListView1.ListItems.Count + 1) ' 编号
listItem.SubItems(2) = subFolder.Path ' 最后一个子文件夹路径
listItem.SubItems(3) = CStr(dcmCount) ' .dcm文件数量
End If
Else
' 如果不是最后一级文件夹,则递归调用
TraverseFoldersAndFillListView (subFolder)
End If
Next subFolder
End Sub
这是窗体加载时的LISTVIEW情况:
With ListView1
.View = lvwReport
.ColumnHeaders.Add = "编号"
.ColumnHeaders.Add = "子文件夹名"
.ColumnHeaders.Add = "dcm数量"
.ColumnHeaders(1).width = 400
.ColumnHeaders(2).width = 2000
.ColumnHeaders(3).width = 1000
End With