Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Daten / Dateien / IsOpen

Prüfen, ob Datei bereits geöffnet ist

Einleitung

Soll eine Datei kopiert, gelöscht oder geöffnet werden, so wird dies vom Windows-System verhindert, falls diese Datei gerade in Benutzung ist (also z.B. von einem anderen Programm geöffnet ist).

Mit der unten gezeigten IsFileOpen-Funktion kann nun vorher genau dies geprüft werden, so dass dem Anwender u.U. eine entsprechende Meldung gegeben werden kann.

Hinweis: Man beachte, dass nicht alle Programme die von ihnen geöffneten Dateien korrekt sperren. So lädt z.B. Notepad eine Datei komplett in den Speicher, so dass das System nichts von der immer noch andauernden Benutzung im Editor bemerken kann. In so einem Fall liefert die unten gezeigte Funktion dann auch folgerichtig False (also "nicht geöffnet") zurück. Microsoft Office dagegen verhält sich korrekt, so dass die Funktion immer den richtigen Status dafür zurückgibt.

Beispiel

Der folgende Code-Abschnitt fordert den Anwender wiederholt auf, eine bestimmte Datei zu schließen (bis sie endlich vom System freigegeben ist):

Do While IsFileOpen("D:\Test.xls")
  MsgBox "Bitte 'Test.xls' schließen!"
Loop
'...

Code / Quelltext

Der folgende Code ist sehr einfach: Es wird versucht, die Datei zum Lesen zu öffnen. Ein eventuell auftretender Fehler wird abgefangen und der Fehlercode dann ausgewertet.

' ©2002 by Jost Schwider, http://vb-tec.de/
Public Function IsFileOpen(ByRef Path As String) As Boolean
  Dim FileNr As Integer
  Dim ErrorNr As Long

  'Datei testweise öffnen:
  On Error Resume Next
    FileNr = FreeFile
    Open Path For Input Lock Write As #FileNr
      ErrorNr = Err.Number
    Close #FileNr
  On Error GoTo 0

  'Ggf. Fehler verarbeiten:
  Select Case ErrorNr
  Case 0    'kein Fehler:
    'NOP
  Case 70   'Permission denied':
    IsFileOpen = True
  Case Else 'sonstiger Fehler:
    Err.Raise ErrorNr
  End Select
End Function

© Jost Schwider, 18.04.2002-18.04.2002 - http://vb-tec.de/isopen.htm