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