Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / System / Datei / Subdir

Prüfen, ob Unterverzeichnisse existieren

Impressum
Kontakt
DSVGO
Historie
26.06.2001Erste Version (nach einer Idee von Francesco Balena)

Problem

Wird die Information benötigt, ob ein Verzeichnis Unterverzeichnisse enthält, so ist dies mit "klassischen" VB-Mitteln nur durch (u.U. zahlreiche) Aufrufe der Dir- und GetAttr-Funktionen möglich. Mit der API-Funktion SHGetFileInfo dagegen kann das Gleiche mit einer einzigen Abfrage erreicht werden.

Beispiel

Der folgende Code-Abschnitt entfernt einen Ordner nur dann, wenn sich keine Unterverzeichnisse darin befinden:

If HasSubdir("D:\Test\") Then
  MsgBox "Ordner nicht löschbar"
Else
  Kill "D:\Test\*.*" 'Ggf. Dateien löschen
  RmDir "D:\Test\"   'Ordner löschen
End If

Code / Quelltext

Die folgende API-Routine muss im Deklarationsteil eines Moduls bekanntgemacht werden:

Private Declare Function SHGetFileAttributes _
    Lib "Shell32" Alias "SHGetFileInfoA" ( _
    ByVal pszPath As Any, ByVal dwFileAttributes As Long, _
    psfi As Any, ByVal cbFileInfo As Long, _
    ByVal uFlags As Long) As Long

Die eigentliche Funktion ruft die gerade gezeigte API-Routine auf und liest die entsprechende Eigenschaft durch Bit-Vergleich aus:

Public Function HasSubdir(ByRef Path As String) As Boolean
  Const SFGAO_HASSUBFOLDER = &H80000000
  Const SHGFI_ATTRIBUTES = &H800
  Dim Mem(1 To 88) As Long

  'FileInfo-Daten lesen:
  SHGetFileAttributes Path, 0, Mem(1), 352, SHGFI_ATTRIBUTES

  'Flag auslesen:
  HasSubdir = CBool(Mem(3) And SFGAO_HASSUBFOLDER)
End Function

© Jost Schwider, 27.06.2001-27.06.2001 - http://vb-tec.de/subdir.htm