VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleHome / System / Datei / Subdir Prüfen, ob Unterverzeichnisse existieren |
| Historie | |
| 26.06.2001 | Erste Version (nach einer Idee von Francesco Balena) |
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.
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
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