devxlogo

FilesToArray – Read all the files or subdirectories in a directory using API functions

FilesToArray – Read all the files or subdirectories in a directory using API functions

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _    (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As LongPrivate Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _    (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As LongPrivate Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As _    LongConst MAX_PATH = 260Private Type FILETIME    dwLowDateTime As Long    dwHighDateTime As LongEnd TypePrivate 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 * 14End Type' Returns a one-based string array containing the files (or directories)' located in the specified path'' the Path argument can contain wildcards, e.g. "C:*.doc")Function FilesToArray(ByVal Path As String, Optional ByVal IncludeDirs As _    Boolean) As String()    Dim lRet As Long    Dim handle As Long    Dim FindData As WIN32_FIND_DATA    Dim FileName As String    Dim fileCount As Long    Dim ok As Boolean    ReDim res(0) As String        ' start the searching, exit if no file matches the spec    handle = FindFirstFile(Path, FindData)    If handle ' get this entry's name        FileName = Left$(FindData.cFileName, InStr(FindData.cFileName, _            vbNullChar) - 1)                If (FindData.dwFileAttributes And vbDirectory) = 0 Then            ' this is a file            ok = Not IncludeDirs        ElseIf FileName  "." And FileName  ".." Then            ' this is a directory, but not a ./.. entry            ok = IncludeDirs        Else            ' this is a ./.. entry            ok = False        End If                    If ok Then            ' add this entry to the result            fileCount = fileCount + 1            If fileCount > UBound(res) Then                ' make room in the array if necessary                ReDim Preserve res(fileCount + 100) As String            End If            res(fileCount) = FileName        End If        ' read the next file, returns zero when there are no more files        lRet = FindNextFile(handle, FindData)    Loop While lRet    ' stop enumeration    FindClose handle        ' discard unused array items and return to caller    ReDim Preserve res(0 To fileCount) As String    FilesToArray = resEnd Function

devx-admin

Share the Post: