Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / System / Datei / FindFile

Laufwerke nach einer bestimmten Datei durchsuchen

Historie
26.03.2001Hinzugefügt: Laufwerke bestimmen; Beispiel angepasst
15.07.2000Komplexeres Beispiel hinzugefügt
29.06.2000Erste Version: Verzeichnis durchsuchen

Einleitung

Manchmal ist es nötig, eine bestimmte Datei im Filesystem zu lokalisieren. Da stellen sich zwei Probleme:

  1. Welche Laufwerke gibt es überhaupt?
  2. Wie kann ein Laufwerk bzw. Verzeichnis komplett durchsucht werden?

Die unten vorgestellten Funktionen LogicalDrives und FindFile beantworten genau diese Fragen.

Beispiel

Alle vorhandenen Laufwerke werden nach einer bestimmten Programmdatei durchsucht, welche ggf. auch gestartet wird:

Dim Path As String
Dim Laufwerk As Variant

For Each Laufwerk In LogicalDrives
  Path = FindFile(Laufwerk, "programm.exe")
  If Len(Path) Then
    Shell Path, vbMaximizedFocus
    Exit For
  End If
Next Laufwerk

Laufwerke bestimmen

Die folgende Funktion gibt eine Aufzählung aller logischen Laufwerke (im Format "X:") zurück:

'Deklarationsteil:
Private Declare Function GetLogicalDriveStringsA Lib "kernel32" ( _
    ByVal nBufferLength As Long, _
    ByVal lpBuffer As String _
  ) As Long

'Funktion:
Function LogicalDrives() As Collection
  Dim s As String * 128
  Dim i As Long
  
  'API aufrufen:
  GetLogicalDriveStringsA Len(s), s
  i = InStr(s, vbNullChar & vbNullChar) 'Länge
  
  'Collection füllen:
  Set LogicalDrives = New Collection
  For i = 1 To i Step 4
    LogicalDrives.Add Mid$(s, i, 2)
  Next i
End Function

Verzeichnis durchsuchen

Mit folgender Routine kann ein gegebenes Verzeichnis Path einschließlich Unterordnern nach einer bestimmten Datei File durchsucht werden:

'Deklarationsteil:
Private Declare Function SearchTreeForFile Lib "imagehlp.dll" ( _
    ByVal RootPath As String, _
    ByVal FileName As String, _
    ByVal OutputPath As String _
  ) As Long

'Funktion:
Function FindFile( _
    ByVal Path As String, _
    ByVal File As String _
  ) As String
  Dim s As String * 1024
  
  If SearchTreeForFile(Path, File, s) _
  Then FindFile = Left$(s, InStr(s, vbNullChar) - 1)
End Function

Die Funktion gibt bei Erfolg den vollständigen Pfad der ersten gefundenen Datei zurück. Sollen alle Dateien gemäß eines Suchpatterns gefunden werden, so ist übrigens deutlich mehr Aufwand nötig (siehe FindFiles).

© Jost Schwider, 29.06.2000-26.03.2001 - http://vb-tec.de/findfile.htm