für eine Prüfung, ob eine zu öffnende Datei bereits geöffnet ist, habe ich im Netz folgende Funktion gefunden:
Function IsFileOpen(filename As String)
Dim filenum As Integer
Dim errnum As Integer
On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.
' Check to see which error occurred.
Select Case errnum
' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function
Klappt alles wunderbar, da ich aber gerne wissen möchte was hier genau passiert, habe ich zwei Verständnisfragen:
1.
filenum = FreeFile() ' Get a free file number.
Was hier geschieht, habe ich inzwischen herausgefunden. Wo der Sinn von "FreeFile" bzw. "free file number" liegt allerdings nicht. Wofür ist das gut?
2.
Open filename For Input Lock Read As #filenum
Hier wird versucht, die Datei (filename) zu öffnen. Soweit klar. Was bedeutet "Lock" und welche Rolle spielt "filenum" (siehe Frage 1)?
Der Rest ist ersichtlich. Ist die Datei bereits geöffnet, tritt ein Fehler (70) auf. Andernfalls nicht, also (0). Der Fehlercode wird in "errnum" gespeichert und über "Select Case" abgefragt. Als Ergebnis erhalte ich "False" (Datei nicht offen) oder "True" (Datei bereits geöffnet).
Ich hoffe auf Erleuchtung.
Gruß
Kai