Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / System / Datei / Exists

Feststellen, ob Datei bzw. Verzeichnis existiert

Historie
05.07.2002Erläuterung, warum eine Realisierung mit "Dir" "böse" ist; Code verschönert
23.09.2001Erste Version

Einleitung

Motivation

Die folgenden beiden Funktionen geben an, ob der angegebene Pfad eine existierende Datei bzw. ein vorhandenes Verzeichnis darstellt.

Kein Dir$ zur Existenzprüfung!

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!

Code / Quelltext

Der Test erfolgt via GetAttr-Funktion, wobei eventuelle Fehler einfach ignoriert werden (beide Funktionen geben in diesem Fall natürlich False zurück).

FileExists

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
DirExists
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