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 IfEnd 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.