使用FindFirstFile這個API函數可以解決此類問題。。。
以下是測試代碼,花了半個小時,得加點分。。。
Private?Declare?Function?FindFirstFile?Lib?"kernel32"?Alias?"FindFirstFileA"?(ByVal?lpFileName?As?String,?lpFindFileData?As?WIN32_FIND_DATA)?As?Long
Private?Declare?Function?FindNextFile?Lib?"kernel32"?Alias?"FindNextFileA"?(ByVal?hFindFile?As?Long,?lpFindFileData?As?WIN32_FIND_DATA)?As?Long
Private?Declare?Function?FindClose?Lib?"kernel32"?(ByVal?hFindFile?As?Long)?As?Long
'最大路徑長度和文件屬性常量的定義
Private?Const?MAX_PATH?=?260
Private?Const?FILE_ATTRIBUTE_ARCHIVE?=?&H20
Const?FILE_ATTRIBUTE_COMPRESSED?=?&H800
Const?FILE_ATTRIBUTE_DIRECTORY?=?&H10
Const?FILE_ATTRIBUTE_HIDDEN?=?&H2
Const?FILE_ATTRIBUTE_NORMAL?=?&H80
Const?FILE_ATTRIBUTE_READONLY?=?&H1
Const?FILE_ATTRIBUTE_SYSTEM?=?&H4
Const?FILE_ATTRIBUTE_TEMPORARY?=?&H100
'自定義數據類型FILETIME和WIN32_FIND_DATA的定義Private?Type?FILETIME
dwLowDateTime?As?Long dwHighDateTime?As?LongEnd?Type
Private?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?TypePrivate?Sub?Command1_Click()
Dim?sPath$,?strFileName$
sPath?=?"C:\Temp\壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七八九十壹二三四五六七.txt"
Debug.Print?"文件全路徑長度:";?Len(sPath),?"文件名長度:";?Len(sPath)?-?Len("C:\Temp\")
Dim?lHandle?As?Long?'FindFirstFileA的句柄
Dim?tFindData?As?WIN32_FIND_DATA?'
lHandle?=?FindFirstFile(sPath,?tFindData)
If?lHandle?=?-1?Then
If?tFindData.dwFileAttributes?<>?&H20?Then'文件?&H10?目錄
MsgBox?"沒有找到文件:"?&?vbCrLf?&?vbCrLf?&?sPath
Else
Debug.Print?"文件名稱:";?tFindData.cFileName
Debug.Print?"文件長度:";?tFindData.nFileSizeLow
End?If
Else?'查詢結束或發生錯誤
MsgBox?"查詢結束或發生錯誤"
End?If
FindClose?lHandle
End?Sub