Kontakt
DSVGO
Historie | |
05.07.2002 | Erläuterung, warum eine Realisierung mit "Dir" "böse" ist; Code verschönert |
23.09.2001 | Erste Version |
Die folgenden beiden Funktionen geben an, ob der angegebene Pfad eine existierende Datei bzw. ein vorhandenes Verzeichnis darstellt.
Eine Existensprüfung via Dir findet man zwar sehr häufig im Internet (etwa: If Dir(Pfad) <> "" Then), ist aber äußerst Fehler-anfällig. (Grund: Dir$ ist nicht re-entrant, erlaubt daher immer nur einen Such-Vorgang.)
Hierzu ein Beispiel: Für alle EXE-Dateien in einem Verzeichnis soll geprüft werden, ob eine dazugehörige (gleichnamige) HLP-Datei existiert. Hier ein Code-Beispiel zum Selber-Testen:
Const Path = "C:\Windows\System32\" Dim File As String File = Dir$(Path & "*.exe") Do While Len(File) Mid$(File, Len(File) - 2) = "hlp" If FileExists(Path & File) Then MsgBox File File = Dir$ Loop
Mit meiner FileExists-Funktion funktioniert dieses Beispiel wie erwartet (es werden alle entsprechenden HLP-Dateien ausgegeben). Benutzt man stattdessen aber Dir$ zur Existenzprüfung, wird nur eine einzige HLP-Datei gefunden!
Der Test erfolgt via GetAttr-Funktion, wobei eventuelle Fehler einfach ignoriert werden (beide Funktionen geben in diesem Fall natürlich False zurück).
Hier muss darauf geachtet werden, dass Verzeichnis-Namen oder Festplatten-Bezeichner keine gültigen Dateinamen sind:
Public Function FileExists(Path As String) As Boolean Const NotFile = vbDirectory Or vbVolume On Error Resume Next FileExists = (GetAttr(Path) And NotFile) = 0 On Error Goto 0 End Function
Public Function DirExists(Path As String) As Boolean On Error Resume Next DirExists = CBool(GetAttr(Path) And vbDirectory) On Error Goto 0 End Function
© Jost Schwider, 23.09.2000-05.07.2002 - http://vb-tec.de/fdexists.htm