VBA Tipp: Verzeichnisbaum durchsuchen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich will einen Verzeichnisbaum nach bestimmten Dateien durchsuchen.

Lösung

Die eingebaute Dir-Funktion erlaubt leider nur das Durchlaufen des jeweiligen Verzeichnisses, nicht von Unterverzeichnissen. Man muss sich daher die zu durchlaufenden Unterverzeichnisse in einer separaten Struktur merken - z.B. in einer Collection. Die folgende Funktion gibt ein String-Array mit den Ergebnissen zurück.

Public Function SearchFiles(Optional CurPath As String = "\", _
                            Optional SrcFiles = "") As String()
'
'  In Access 97:
'  Public Function SearchFiles(Optional CurPath As String = "\", _
'                            Optional SrcFiles = "")
'
Dim ix As Long, L As Long
Dim sDir As String
Dim sCurDir As String
Dim colDir As New Collection
Dim arrResult() As String
 
  L = Len(SrcFiles)
  If Right$(CurPath, 1) <> "\" Then CurPath = CurPath & "\"
  colDir.Add CurPath
  While colDir.Count > 0
    sCurDir = colDir.Item(1)
    colDir.Remove 1
    sDir = Dir$(sCurDir, vbDirectory)
    While Len(sDir) > 0
      If (sDir <> ".") And (sDir <> "..") Then
        If (GetAttr(sCurDir & sDir) AND vbDirectory)<> 0 Then
          colDir.Add sCurDir & sDir & "\"
        Else
          If Right(sDir, L) = SrcFiles Then
            ReDim Preserve arrResult(ix)
            arrResult(ix) = sCurDir & sDir
            ix = ix + 1
          End If
        End If
      End If
      sDir = Dir$
    Wend
  Wend
  Set colDir = Nothing
  SearchFiles = arrResult
End Function

Aufruf

Beispiel, das die erste und zweite gefundene Datei ausgibt:

SearchFiles("E:\Eigene Dateien\Diverses", ".txt")(0)
SearchFiles("E:\Eigene Dateien\Diverses", ".txt")(1)
Wiki hinweis.png Anmerkung: Ab Access 2000 empfiehlt sich die Verwendung des komfortableren FileSearch-Objekts, auch wenn dieses etwas langsamer läuft.


Siehe auch