Visual Basic Programming Code Examples Visual Basic > Files Directories Drives Code Examples Recursively search all files in directory structure Recursively search all files in directory structure 'Get all the matching files in the directory structure. This tip is useful for VB 3.0, 4.0 and 5.0 - 16 bit and 32 bit There were some tips published for similar type of function before but this one does better job, as it does not have any limitation. Moreover, since this code does not use any API it could be easily ported between 16 - 32 bit applications. Following procedure DirWalk will let you search the entire directory structure starting at wherever you specify in the argument. How to use ============ The procedure should be called as follows ReDim sArray(0) As String Call DirWalk("OLE*.DLL", "C:\", sArray) The procedure would accept the wild card in the first argument which is search pattern for the file name. The second argument is the location where to start. Third argument is an array of strings. The procedure will recursively go to the deepest level in the directory structure and get all the matching file names with full path in the array sArray. This array is ReDimed from the function and will have as many members as matches found. To use DirWalk you will have to put two extra controls, FileListBox and DirListBox, on the form. Following procedure is assumed to be on a form on which there are two controls, FileListBox with name File1 and DirListBox with name Dir1. Keep them invisible to improve the speed of search. Putting these additional controls on a form does not cause any overhead as they are part of basic libray of controls for VB. Code ==== Sub DirWalk(ByVal sPattern As String, ByVal CurrDir As String, sFound() As String) Dim i As Integer Dim sCurrPath As String Dim sFile As String Dim ii As Integer Dim iFiles As Integer Dim iLen As Integer If Right$(CurrDir, 1) <> "\" Then Dir1.Path = CurrDir & "\" Else Dir1.Path = CurrDir End If For i = 0 To Dir1.ListCount If Dir1.List(i) <> "" Then DoEvents Call DirWalk(sPattern, Dir1.List(i), sFound) Else If Right$(Dir1.Path, 1) = "\" Then sCurrPath = Left(Dir1.Path, Len(Dir1.Path) - 1) Else sCurrPath = Dir1.Path End If File1.Path = sCurrPath File1.Pattern = sPattern If File1.ListCount > 0 Then 'matching files found in the directory For ii = 0 To File1.ListCount - 1 ReDim Preserve sFound(UBound(sFound) + 1) sFound(UBound(sFound) - 1) = sCurrPath & "\" & File1.List(ii) Next ii End If iLen = Len(Dir1.Path) Do While Mid(Dir1.Path, iLen, 1) <> "\" iLen = iLen - 1 Loop Dir1.Path = Mid(Dir1.Path, 1, iLen) End If Next i End Sub