如何实现遍历文件夹中的所有文件

'--------------------------------------------------------------------------------
'把下面放到模块中
Option Explicit


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 Type

Public 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 Type
----------------------
'--------------------------------------------------------------------------------
'           把当前文件夹路径下的所有文件入到listview中
'--------------------------------------------------------------------------------
Private Sub finfiles(tCurrentdir As String)
    Dim itmX As ListItem
    Dim tFindData As WIN32_FIND_DATA
    Dim strFileName As String
    Dim lHandle As Long
    Dim CountFolder As Integer
    Dim CountFiles As Integer
    CountFolder = 0
    CountFiles = 0
    ListView1.ListItems.Clear
    lHandle = FindFirstFile(tCurrentdir & "\*.*", tFindData)
    If lHandle = 0 Then
       Set itmX = ListView1.ListItems.Add(, , strFileName & "找不到文件")
       Exit Sub
    End If
   strFileName = fDelInvaildChr(tFindData.cFileName)
   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
                    Set itmX = ListView1.ListItems.Add(, , strFileName)
                    itmX.SmallIcon = 1
                    CountFolder = CountFolder + 1
                End If
            Else
                Debug.Print InStr(LCase(Right(strFileName, 3)), ExtendFileName)
                If InStr(ExtendFileName, LCase(Right(strFileName, 3))) > 0 Then
                    Set itmX = ListView1.ListItems.Add(, , strFileName)
                    itmX.SubItems(1) = CStr(FileLen(tCurrentdir & "\" & strFileName))
                    itmX.SmallIcon = 2
                    itmX.SubItems(2) = FileDateTime(tCurrentdir & "\" & strFileName)
                    CountFiles = CountFiles + 1
                End If
            End If
        End If
    Loop
    ListView1.Sorted = True
    ListView1.SortKey = 1
    StatusBar1.Panels(2).Text = CurrentDir
    StatusBar1.Panels(3).Text = "文件夹:" & CountFolder & "  文件:" & CountFiles
End Sub

 

posted @ 2014-04-03 13:54  Spacecup  阅读(683)  评论(0编辑  收藏  举报