VB转到文件夹并选中该文件 »

VB 遍历指定目录下的指定扩展名文件

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

Public 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
Public Function TrimPath(sPath As String) As String
  Dim i As Integer
    i = InStrRev(sPath, ".") + 1
    TrimPath = Mid(sPath, i)
End Function

Public Sub sDirTraversal(ByVal strPathName As String, ByRef list1 As ListBox, ByRef F_name As String)
    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

      If TrimPath(strPathName & "\" & strFileName) = F_name Then
            list1.AddItem strPathName & "\" & strFileName
        End If
    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

               If TrimPath(strPathName & "\" & strFileName) = F_name Then
                    list1.AddItem strPathName & "\" & strFileName
                End If
            End If
        End If

    Loop

    '如果该目录下有目录,则根据目录数组递归遍历
    If iIndex > 0 Then

        For i = 1 To iIndex
            sDirTraversal sSubDir(i), list1, F_name
        Next

    End If

End Sub
 

Private Sub Command1_Click()
Call sDirTraversal("D:\wwwroot\linhaibo", list1, "html")
End Sub
 

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright © 2009-2011 linhaibo.com. All Rights Reserved .