[Eine Seite zurück] [Übersicht] [Eine Seite vor]

Benutzung auf eigene Gefahr !
Keine Garantie für garnichts !

Liste von Dateipfaden automatisch erstellen (rekursiv)

Sprache / Programm: VBA ab Office 97
Beschreibung

Das Programm erstellt eine Liste von Dateien und Pfaden und durchsucht dabei auch die Unterverzeichnisse.

VBA-Quelltext
Public Function InUnterVerzSuchen(VerzPfad As String, DateiTyp As String, Attrib As Integer)
    Dim VerzName As String, DateiName As String, VerzListe() As String, DateiNr As Integer
    Dim VerzNr As Integer, DateiListe() As String, TempListe, Nr As Integer
   
    ' Liste mit Dateinamen erstellen
  If Right$(VerzPfad, 1) = "\" Then
      DateiName = Dir$(VerzPfad & DateiTyp, Attrib)
  Else
      DateiName = Dir$(VerzPfad & "\" & DateiTyp, Attrib)
  End If
    DateiNr = 0
   
    While DateiName <> vbNullString
        If (DateiName <> ".") And (DateiName <> "..") Then
            DateiNr = DateiNr + 1
            ReDim Preserve DateiListe(1 To DateiNr)
            DateiListe(DateiNr) = VerzPfad & "\" & DateiName
        End If
        DateiName = Dir$()
    Wend
   
    ' Liste mit Unterverzeichnissen erstellen
    VerzNr = 0
    VerzName = Dir$(VerzPfad & "\", Attrib Or vbDirectory)
    While VerzName <> vbNullString
        If (VerzName <> ".") And (VerzName <> "..") Then
            ' Handelt es sich um ein Verzeichnis ?
            If GetAttr(VerzPfad & "\" & VerzName) And vbDirectory Then
                VerzNr = VerzNr + 1
                ReDim Preserve VerzListe(1 To VerzNr)
                VerzListe(VerzNr) = VerzName
            End If
        End If
        VerzName = Dir$() ' Nächsten Datei- oder Verzeichnisnamen holen
    Wend
   
    ' Rekursiver Aufruf, um Unterverzeichnisse zu durchsuchen
    For VerzNr = 1 To VerzNr
        TempListe = InUnterVerzSuchen(VerzPfad & "\" & VerzListe(VerzNr), DateiTyp, Attrib)
        If IsArray(TempListe) Then
            For Nr = LBound(TempListe) To UBound(TempListe)
                DateiNr = DateiNr + 1
                ReDim Preserve DateiListe(1 To DateiNr)
                DateiListe(DateiNr) = TempListe(Nr)
            Next Nr
        End If
    Next VerzNr
    If DateiNr = 0 Then InUnterVerzSuchen = False Else InUnterVerzSuchen = DateiListe()
End Function
Argumente der Funktion/Prozedur

VerzPfad

Startverzeichnis, welches einschließlich eventuell vorhandener Unterverzeichnisse durchsucht werden soll.

DateiTyp

Dateibezeichnung, welche die üblichen Platzhalter (*, ?) enthalten darf

Attrib

Dateiattribute. Zugelassene Attribute sind vbNormal, vbHidden, vbSystem, vbVolume, vbDirectory
Verwendete Variable

VerzName

Name des zu durchsuchenden Verzeichnisses.

VerzListe

Liste aller Unterverzeihcnisse im aktuellen Verzeichnis.
Rückgabewert

Der boolesche Wert ‘False‘ wird zurückgegeben, falls keine Datei die in Kriterien von ‘DateiTyp‘ erfüllt. Andernfalls wird ein Feld mit den Namen und Pfaden aller gefundenen Dateien zurückgegeben.

Hinweis

Seit Acces 97 kann die Funktion durch das Find-Objekt ersetzt werden, wobei Find allerdings auf eine bestimmte Zahl von Dateien begrenzt ist.

Seit Access 2000 steht auch das FileSystem-Object zur Verfügung.

Das besondere an diesem Programm ist sein rekursiver Ablauf, bei dem es sich für jedes zu bearbeitende Unterverzeichnis erneut aufruft.

Dank an Martin Deutsch, dessen Verbesserungsvorschlag das Programm bei leeren Unterverzeichnissen zuverlässiger macht.

Anwendungsgebiete, Fehler und Warnungen

Fehlende Datenträger, nicht vergebene Laufwerksbezeichnungen und nicht verbundene Netzlaufwerke führen zu einem nicht-behebbaren Fehler, der zum Abbruch der Anwendung führt.