各位大大们,我写了个程序,需要查找到全盘所有.doc文件的路径
请大家帮帮忙,给个例子简单点吧,我能力有限。谢谢了
请大家帮帮忙,给个例子简单点吧,我能力有限。谢谢了
解决方案 »
- 看来看去还是这本好. 什么起点纵横都是渣呀.
- 请教:关于asp中的图片处理,如何操作?急 分少可以再加
- .NET出来了,有谁知道它和COM/DCOM/COM+的关系吗?
- 愿意给我讲一讲 什么是winsock吗?怎么用?
- 向高手求教!我在使用adodc和datagrid中遇到点问题!十分感谢
- 请问那有财务金额录入控件下载?
- 有一个怪事,在不同的机器上VB程序运行一段时间后,把系统资源都占完了,什么东东都不能运行了,这是怎么回事。
- 求教关于MSHFlexGrid分页的问题
- 大家来关心我一下吧!
- 大散分啦!!!vb数据库问题------大家都来看看???//
- matlab里的二维数组怎么被VB调用
- 如何用exe文件来生成exe文件
VB 中遍历目录,遍历目录查找文件的2个实现方法方法1:API实现将下列代码保存到一个模块中,就可以直接调用了--------------------------------------------------------------------------------
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long'最大路径长度和文件属性常量的定义
Public Const MAX_PATH = 260
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Const FILE_ATTRIBUTE_HIDDEN = &H2
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const FILE_ATTRIBUTE_SYSTEM = &H4
Public Const FILE_ATTRIBUTE_TEMPORARY = &H100'自定义数据类型FILETIME和WIN32_FIND_DATA的定义
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End TypePublic Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End TypePublic Function fDelInvaildChr(str As String) As String
On Error Resume Next
For i = Len(str) To 1 Step -1
If Asc(Mid(str, i, 1)) <> 0 And Asc(Mid(str, i, 1)) <> 32 Then
fDelInvaildChr = Left(str, i)
Exit For
End If
Next
End Function
'遍历主函数
'参数说明:
' strPathName 要遍历的目录
' objList 使用VB的内部控件ListBox来存放遍历得到的路径,之所以
' 不使用字符串数组是因为数组大小不好定义
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub sDirTraversal(ByVal strPathName As String, ByRef objList As ListBox)
Dim sSubDir(200) As String '存放当前目录下的子目录,下标可根据需要调整
Dim iIndex As Integer '子目录数组下标
Dim i As Integer '用于循环子目录的查找
Dim lHandle As Long 'FindFirstFileA 的句柄
Dim tFindData As WIN32_FIND_DATA '
Dim strFileName As String '文件名
On Error Resume Next
'初始化变量
i = 1
iIndex = 0
tFindData.cFileName = "" '初始化定长字符串
lHandle = FindFirstFile(strPathName & "\*.*", tFindData)
If lHandle = 0 Then '查询结束或发生错误
Exit Sub
End If
strFileName = fDelInvaildChr(tFindData.cFileName)
If tFindData.dwFileAttributes = &H10 Then '目录
If strFileName <> "." And strFileName <> ".." Then
iIndex = iIndex + 1
sSubDir(iIndex) = strPathName & "\" & strFileName '添加到目录数组
End If
Else
objList.AddItem strPathName & "\" & strFileName
End If
'循环查找下一个文件,直到结束
Do While True
tFindData.cFileName = ""
If FindNextFile(lHandle, tFindData) = 0 Then '查询结束或发生错误
FindClose (lHandle)
Exit Do
Else
strFileName = fDelInvaildChr(tFindData.cFileName)
If tFindData.dwFileAttributes = &H10 Then
If strFileName <> "." And strFileName <> ".." Then
iIndex = iIndex + 1
sSubDir(iIndex) = strPathName & "\" & strFileName '添加到目录数组
End If
Else
objList.AddItem strPathName & "\" & strFileName
End If
End If
Loop
'如果该目录下有目录,则根据目录数组递归遍历
If iIndex > 0 Then
For i = 1 To iIndex
sDirTraversal sSubDir(i), objList
Next
End If
End Sub --------------------------------------------------------------------------------
方法2:不使用API,直接用VB的函数Dir 来实现--------------------------------------------------------------------------------
'------------------------------------
'遍历列出所有目录
Public Function FindTxt(ByVal sTmp As String, list As Collection)
Dim myPath, myName As String
Dim i, j, k As Integer
Dim sPath() As String
Dim sStr() As String
Dim sTemp As String
'Dim sTxt() As String
myPath = sTmp
myName = Dir(myPath, vbDirectory) ' 找寻第一项。
j = 0
k = 0
While Len(myName) > 0
If myName <> "." And myName <> ".." Then
' 使用位比较来确定 MyName 代表一目录。
If (GetAttr(myPath & myName) And vbDirectory) = vbDirectory Then
ReDim Preserve sPath(j)
'Debug.Print "找到目录 " & myName ' 如果它是一个目录,将其名称显示出来。
sPath(j) = myName
'i = i + 1
j = j + 1
Else
sStr = Split(myName, ".")
If UBound(sStr) = 1 Then
If LCase(sStr(1)) = "txt" Then
'ReDim Preserve sTxt(k)
'Debug.Print "找到文件 " & myName ' 如果它是一个目录,将其名称显示出来。
list.Add myName
'sTxt(k) = myName
'k = k + 1
End If
End If
End If
End If
myName = Dir
Wend
If j > 0 Then
For i = 0 To UBound(sPath)
Call FindTxt(myPath & sPath(i) & "\", list)
Next
End If Erase sPath
'Erase sTxt
End Function
'------------------------------------
'遍历列出所有目录
Public Function FindDir(ByVal sTmp As String, list As Collection)
Dim myPath, myName As String
Dim i, j As Integer
Dim sPath() As String
myPath = sTmp
myName = Dir(myPath, vbDirectory) ' 找寻第一项。
j = 0
While Len(myName) > 0
'i = 0
If myName <> "." And myName <> ".." Then
' 使用位比较来确定 MyName 代表一目录。
If (GetAttr(myPath & myName) And vbDirectory) = vbDirectory Then
ReDim Preserve sPath(j)
list.Add myName
sPath(j) = myName
'i = i + 1
j = j + 1
End If
End If
myName = Dir
Wend
If j > 0 Then
For i = 0 To UBound(sPath)
FindDir myPath & sPath(i) & "\", list
Next
End If
Erase sPath
End Function
--------------------------------------------------------------------------------总结,方法2实现起来比较简单,速度也不错,调用方法:dim oCols as new collection
FindDir "C:\", oCols
for i =1 to oCols.Count
debug.print oCols.Item(i)
next--------------------------------------------------------------------------------总结,方法2实现起来比较简单,速度也不错,调用方法:dim oCols as new collection
FindDir "C:\", oCols
for i =1 to oCols.Count
debug.print oCols.Item(i)
next