Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Intermediate
Jun 29, 2000



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Search a file in a directory tree using the Imagehlp DLL

You can search a file in all the subdirectories of a given drive in VB using a recursive routine based on the Dir$ function, the FileSystemObject component, or the FindFirstFile/FindNextFile API functions. There is a fourth way you might want to try out, based on the SearchTreeForFile function embedded in the ImageHlp DLL. The following routine takes advantage of this API function:

Private Declare Function SearchTreeForFile Lib "imagehlp.dll" (ByVal sRootPath _
    As String, ByVal InputPathName As String, ByVal OutputPathBuffer As String) _
    As Boolean

' search a file on directory subtree
' returns the complete path+name of the filename
' or a null string if the filename hasn't been found
' only the first occurrence of the file is returned
' ROOTDIR can be a drive root dir (e.g. "C:\") or a subdir ("C:\DOCS")

Function SearchFileInDirTree(ByVal rootDir As String, ByVal Filename As String) _
    As String
    ' this is the max length for a filename
    Dim buffer As String * 260
    If SearchTreeForFile(rootDir, Filename, buffer) Then
        ' a non-zero return value means success
        SearchFileInDirTree = Left$(buffer, InStr(buffer, vbNullChar) - 1)
    End If
End Function
Note that when you use the SearchTreeForFile API function your program must wait until the file is found or the entire hard disk has been scanned. For this reason you might want to display a warning to the end user, explaining that the search might take a long time. For this reason this routine is especially useful to quickly scan a smaller directory subtree, rather than an entire drive.
Francesco Balena
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date