Revision History
Site Map

Graph: dbPix image storage vs OLE Embedding and Linking in Microsoft Access

The Access Image FAQ < Previous ArticleNext Article >

Recursive Folder Search - Find Files in Subdirectories

Sample Newsgroup Questions 
Access 2000 doing a recursive file search
Parsing Subdirectories
Using Nested Dir
Making a list of files from folders and subfolders
How can I list the files in a directory and sub directory
Move through directories
Looping through subfolders in a folder
Directories, recursive search in Access 97 / VBA
Files, recursively searching directories for Access 97

Sometimes it can be useful to find all the images beneath a certain point in the directory tree. For example, a common approach to storing digital photo files is to place the files in date folders according to the date the photo was taken, e.g.

Photo root:  c:\photos\
Photos taken on 15th January 2005:  c:\photos\2005-01-15\
Photos taken on 20th August 2006:  c:\photos\2006-08-20\

The 'Dir' function offers a convenient solution to finding files in a single folder, however, due to Dir's internal implementation it can't be called recursively.

The 'RecursiveDir' function below allows us to find all files beneath a certain point in the directory tree (or all .jpg files, for example). The code is based on an example by Albert Kallall, adapted by Allen Browne.

Usage Example:

    Dim colFiles As New Collection
    RecursiveDir colFiles, "C:\Photos", "*.jpg", True

    Dim vFile As Variant
    For Each vFile In colFiles
        Debug.Print vFile
    Next vFile



Public Function RecursiveDir(colFiles As Collection, _
                             strFolder As String, _
                             strFileSpec As String, _
                             bIncludeSubfolders As Boolean)

    Dim strTemp As String
    Dim colFolders As New Collection
    Dim vFolderName As Variant

    'Add files in strFolder matching strFileSpec to colFiles
    strFolder = TrailingSlash(strFolder)
    strTemp = Dir(strFolder & strFileSpec)
    Do While strTemp <> vbNullString
        colFiles.Add strFolder & strTemp
        strTemp = Dir

    If bIncludeSubfolders Then
        'Fill colFolders with list of subdirectories of strFolder
        strTemp = Dir(strFolder, vbDirectory)
        Do While strTemp <> vbNullString
            If (strTemp <> ".") And (strTemp <> "..") Then
                If (GetAttr(strFolder & strTemp) And vbDirectory) <> 0 Then
                    colFolders.Add strTemp
                End If
            End If
            strTemp = Dir

        'Call RecursiveDir for each subfolder in colFolders
        For Each vFolderName In colFolders
            Call RecursiveDir(colFiles, strFolder & vFolderName, strFileSpec, True)
        Next vFolderName
    End If

End Function

Public Function TrailingSlash(strFolder As String) As String
    If Len(strFolder) > 0 Then
        If Right(strFolder, 1) = "\" Then
            TrailingSlash = strFolder
            TrailingSlash = strFolder & "\"
        End If
    End If
End Function

Related Articles

Parse the Folder or Filename from a Full Path
How to display the Common 'Browse for Folder' Dialog to Choose a Folder

Imaging for Access that's Easy, Efficient & Fast
  • NO OLE Bloat
  • NO App Dependencies
  • NO Complex Coding
  • NO Performance Penalty
  •  DBPix logo
    Read More

    Microsoft and the Office logo are trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries.