Find files by extension

A common scripting task is to perform some task in a loop using data that resides in a collection of files on disk.  The custom function, GetFiles, in the script example below shows how to retrieve a list of full file paths for all files with a given extension type in the specified directory.

In the script example, the concept is to search the folder specified by variable fDir for all files with extension "stp".  After calling the GetFiles function, the array stpFiles() contains the full file path strings to each of the STP files found in the directory.  The stpFiles() array is then looped over with a For loop and the full file path of each STP file is printed to the output window.

Sub Main

    'Directory where the files reside
    Dim fDir As String
    fDir = "C:\temp\fred\support"

    'Get the list of files in the directory
    Dim stpFiles() As String, nFiles As Long
    nFiles = GetFiles( fDir, "stp", stpFiles() )

    'Report the list of files found
    Dim curStpIdx As Long
    Print ""
    Print "STEP files found in directory:"
    For curStpIdx = 0 To nFiles-1
        Print Chr(9) & stpFiles(curStpIdx)
    Next
    Print ""

End Sub

Function GetFiles( ByVal in_dir As String, _
                   ByVal in_ext As String, _
                   ByRef out_FileList() As String ) As Long

    'This helper function scans a directory for files
    'with a specific extension returns their path names
    'INPUTS:
    '   in_dir   = string defining the directory to be searched
    '   in_ext   = string defining the file extension
    'OUTPUTS:
    '   returns the number of files that were found
    '   updates out_fileList to contain the full file paths

    'Change to the search directory
    ChDir( in_dir )

    Dim nF As Long
    Dim cFile As String
    nF = 0
    cFile = Dir$("*." & in_ext)
    While cFile <> ""
        If nF = 0 Then
            ReDim out_FileList(0)
            out_FileList(0) = in_dir & "\" & cFile
        Else
            ReDim Preserve out_FileList( nF )
            out_FileList(UBound(out_FileList)) = in_dir & "\" & cFile
        End If
        nF   += 1
        cFile = Dir$()
    Wend

    Return nF

End Function

Still need help? Contact Us Contact Us