Kontakt
DSVGO
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