如何遍历C盘上所有BMP文件

解决方案 »

  1.   

    用下面的例子:调用的时候搜索条件写(*.bmp)
    ===========================
    'Create a form with a command button (command1), a list box (list1)
    'and four text boxes (text1, text2, text3 and text4).
    'Type in the first textbox a startingpath like c:\
    'and in the second textbox you put a pattern like *.* or *.txt
    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 GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
    Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
    Const MAX_PATH = 260
    Const MAXDWORD = &HFFFF
    Const INVALID_HANDLE_VALUE = -1
    Const FILE_ATTRIBUTE_ARCHIVE = &H20
    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
    Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
    End 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 Type
    Function StripNulls(OriginalStr As String) As String
        If (InStr(OriginalStr, Chr(0)) > 0) Then
            OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
        End If
        StripNulls = OriginalStr
    End Function
    Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
        Dim FileName As String ' Walking filename variable...
        Dim DirName As String ' SubDirectory Name
        Dim dirNames() As String ' Buffer for directory name entries
        Dim nDir As Integer ' Number of directories in this path
        Dim i As Integer ' For-loop counter...
        Dim hSearch As Long ' Search Handle
        Dim WFD As WIN32_FIND_DATA
        Dim Cont As Integer
        If Right(path, 1) <> "\" Then path = path & "\"
        ' Search for subdirectories.
        nDir = 0
        ReDim dirNames(nDir)
        Cont = True
        hSearch = FindFirstFile(path & "*", WFD)
        If hSearch <> INVALID_HANDLE_VALUE Then
            Do While Cont
            DirName = StripNulls(WFD.cFileName)
            ' Ignore the current and encompassing directories.
            If (DirName <> ".") And (DirName <> "..") Then
                ' Check for directory with bitwise comparison.
                If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
                    dirNames(nDir) = DirName
                    DirCount = DirCount + 1
                    nDir = nDir + 1
                    ReDim Preserve dirNames(nDir)
                End If
            End If
            Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
            Loop
            Cont = FindClose(hSearch)
        End If
        ' Walk through this directory and sum file sizes.
        hSearch = FindFirstFile(path & SearchStr, WFD)
        Cont = True
        If hSearch <> INVALID_HANDLE_VALUE Then
            While Cont
                FileName = StripNulls(WFD.cFileName)
                If (FileName <> ".") And (FileName <> "..") Then
                    FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
                    FileCount = FileCount + 1
                    List1.AddItem path & FileName
                End If
                Cont = FindNextFile(hSearch, WFD) ' Get next file
            Wend
            Cont = FindClose(hSearch)
        End If
        ' If there are sub-directories...
        If nDir > 0 Then
            ' Recursively walk into them...
            For i = 0 To nDir - 1
                FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
            Next i
        End If
    End Function
    Sub Command1_Click()
        Dim SearchPath As String, FindStr As String
        Dim FileSize As Long
        Dim NumFiles As Integer, NumDirs As Integer
        Screen.MousePointer = vbHourglass
        List1.Clear
        SearchPath = Text1.Text
        FindStr = Text2.Text
        FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
        Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
        Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
        Screen.MousePointer = vbDefault
    End Sub
      

  2.   

    '我以前写的一个'引用microsoft script runtime'加一个lable,一个commandOption Explicit
    Dim m_lngFileCount As Long '定义计数器
    Dim m_objFSO As Scripting.FileSystemObject '定义文件系统对象Sub CheckFolder(strPath As String)
    Dim objFolder As Scripting.Folder '文件夹对象
    Dim objFile As Scripting.File '文件对象
    Dim objSubdirs As Scripting.Folders '文件夹集合对象
    Dim objLoopFolder As Scripting.Folder '文件夹对象Label1.Caption = "Checking directory " & strPath
    Set objFolder = m_objFSO.GetFolder(strPath)' 检查目录中的文件
    For Each objFile In objFolder.Files
    If UCase$(Right$(objFile.ShortPath, 4)) = ".BMP" Then
    '这一段是条件检查,但找到的文件是否符合给定的条件,这儿通过取文件名的
    '最后4位看是不是“.GIF“来判断文件是否是GIF文件。
    m_lngFileCount = m_lngFileCount + 1
    '找到指定条件的文件后进行相应的操作,这儿是把计数器加一。
    End If
    Next objFile' 在所有子目录中循环,计数。
    Set objSubdirs = objFolder.SubFolders
    For Each objLoopFolder In objSubdirs
    CheckFolder objLoopFolder.Path
    '递归调用CheckFolder子过程,实现目录树的遍历。
    DoEvents
    Next objLoopFolderSet objSubdirs = Nothing
    Set objFolder = NothingEnd SubPrivate Sub Command1_Click()
    Set m_objFSO = New Scripting.FileSystemObject
    m_lngFileCount = 0
    CheckFolder "C:\"
    Label1.Caption = "C盘下GIF文件总数: " & m_lngFileCountEnd Sub