算你运气好,我最近刚好写了一段枚举文件的代码,用的时候别忘了我呀:) '''''''''''''''''''''''''''''''''''''''''''''''' 'author:dah 'date:2001.3.15 'usage:for emumate all files in a directory '''''''''''''''''''''''''''''''''''''''''''''''' '用来去处给定字串的C语言后缀,即'\0'字符 Public Function TrimZeroSuffix(ByVal zeroString As String) As String Dim RetStr As String Dim i As Integer RetStr = "" i = 1 Do While i <> Len(zeroString) If Mid(zeroString, i, 1) <> Chr(0) Then RetStr = RetStr & Mid(zeroString, i, 1) Else Exit Do End If i = i + 1 Loop TrimZeroSuffix = RetStr End Function''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Used for find files ' ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long 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 LongPublic Const MAX_PATH = 260 'Defined in stdlib.h '''''''''''''''''''''''''''''''''''''''''' 'Defined in Mapi.h Public Const FILE_ATTRIBUTE_READONLY = 1& Public Const FILE_ATTRIBUTE_HIDDEN = 2& Public Const FILE_ATTRIBUTE_SYSTEM = 4& Public Const FILE_ATTRIBUTE_DIRECTORY = 16& Public Const FILE_ATTRIBUTE_ARCHIVE = 32& Public Const FILE_ATTRIBUTE_NORMAL = 128& Public Const FILE_ATTRIBUTE_TEMPORARY = 256& '''''''''''''''''''''''''''''''''''''''''' Public Type FILETIME ' 8 Bytes dwLowDateTime As Long dwHighDateTime As Long End TypePublic Type WIN32_FIND_DATA lFileAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long lReserved0 As Long lReserved1 As Long cFileName As String * MAX_PATH cAlternateFileName As String * 14 End Type'rec 为全局数据集,在使用该函数时,应该先打开数据库并赋予rec适当的数据集'在VB中好像无法通过传进作为函数地址的参数(不知addressof操作符可行否) '但在C++中就可以,因为它有函数指针 '给于的pathname应该是这种形式的("c:")Public Sub Emufiles(ByVal Pathname As String, ByVal ID As Long) Dim SearchName As String Dim Find_Data As WIN32_FIND_DATA Dim lhandle, Ret As Long SearchName = Pathname & "\*.*" lhandle = FindFirstFile(SearchName, Find_Data) Ret = lhandleDo While Ret <> 0 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'handle the file here '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If (Find_Data.lFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then
If (Left(Find_Data.cFileName, 1) <> ".") Then 'is a directory 'Debug.Print Pathname & "\" & TrimZeroSuffix(Find_Data.cFileName) & "\" 'handle it here Call Emufiles(Pathname & "\" & TrimZeroSuffix(Find_Data.cFileName), ID) End If
Else 'is a file 'handle the file here 'Debug.Print Pathname & "\" & TrimZeroSuffix(Find_Data.cFileName) End If Ret = FindNextFile(lhandle, Find_Data) LoopFindClose (lhandle) End Sub
''''''''''''''''''''''''''''''''''''''''''''''''
'author:dah
'date:2001.3.15
'usage:for emumate all files in a directory
''''''''''''''''''''''''''''''''''''''''''''''''
'用来去处给定字串的C语言后缀,即'\0'字符
Public Function TrimZeroSuffix(ByVal zeroString As String) As String
Dim RetStr As String
Dim i As Integer
RetStr = ""
i = 1
Do While i <> Len(zeroString)
If Mid(zeroString, i, 1) <> Chr(0) Then
RetStr = RetStr & Mid(zeroString, i, 1)
Else
Exit Do
End If
i = i + 1
Loop
TrimZeroSuffix = RetStr
End Function'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Used for find files
'
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
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 LongPublic Const MAX_PATH = 260 'Defined in stdlib.h
''''''''''''''''''''''''''''''''''''''''''
'Defined in Mapi.h
Public Const FILE_ATTRIBUTE_READONLY = 1&
Public Const FILE_ATTRIBUTE_HIDDEN = 2&
Public Const FILE_ATTRIBUTE_SYSTEM = 4&
Public Const FILE_ATTRIBUTE_DIRECTORY = 16&
Public Const FILE_ATTRIBUTE_ARCHIVE = 32&
Public Const FILE_ATTRIBUTE_NORMAL = 128&
Public Const FILE_ATTRIBUTE_TEMPORARY = 256&
''''''''''''''''''''''''''''''''''''''''''
Public Type FILETIME ' 8 Bytes
dwLowDateTime As Long
dwHighDateTime As Long
End TypePublic Type WIN32_FIND_DATA
lFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
lReserved0 As Long
lReserved1 As Long
cFileName As String * MAX_PATH
cAlternateFileName As String * 14
End Type'rec 为全局数据集,在使用该函数时,应该先打开数据库并赋予rec适当的数据集'在VB中好像无法通过传进作为函数地址的参数(不知addressof操作符可行否)
'但在C++中就可以,因为它有函数指针
'给于的pathname应该是这种形式的("c:")Public Sub Emufiles(ByVal Pathname As String, ByVal ID As Long)
Dim SearchName As String
Dim Find_Data As WIN32_FIND_DATA
Dim lhandle, Ret As Long
SearchName = Pathname & "\*.*"
lhandle = FindFirstFile(SearchName, Find_Data)
Ret = lhandleDo While Ret <> 0
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'handle the file here
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If (Find_Data.lFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then
If (Left(Find_Data.cFileName, 1) <> ".") Then 'is a directory
'Debug.Print Pathname & "\" & TrimZeroSuffix(Find_Data.cFileName) & "\"
'handle it here
Call Emufiles(Pathname & "\" & TrimZeroSuffix(Find_Data.cFileName), ID)
End If
Else
'is a file
'handle the file here
'Debug.Print Pathname & "\" & TrimZeroSuffix(Find_Data.cFileName)
End If
Ret = FindNextFile(lhandle, Find_Data)
LoopFindClose (lhandle)
End Sub