Nichts ist älter als der Status von eben
Eben war die datei noch zu öffnen und jetzt, wo du sie öffnen möchtest, ist die gerade gesperrt worden.
Das einfachste ist, die Datei direkt zu öffnen und auf entsprechende Fehler/Exceptions zu reagieren (z.B. x mal versuchen und dann erst mit der
Exception abbrechen).
Was du jetzt machst ist die Datei zu öffnen und wieder zu schliessen um diese dann wieder zu öffnen ...
Und eine Datei, die nicht existiert, bekommst du mit den Parametern nicht geöffnet, somit ist der Parameter
CheckIfExists
irgendwie unnütz.
Dass die Datei existiert, weiß ich schon wenn ich die CanOpenFile-Funktion aufrufe, will es daher in dieser Funktion nicht noch einmal prüfen (wenn man die Funktion 100.000 mal aufruft, kann das schon zeitlich was ausmachen).
Die Prüfung (ob man die Datei öffnen kann) hatte ich wohl (ist schon ein paar Jahre her) vermutlich eingeführt, weil es anscheinend zu größeren Problemen kommen konnte, wenn man versucht eine gesperrte Datei zu öffnen / oder weil es sich dann zeitlich spürbar verschlechterte.
Grundsätzlich versuche ich es immer so zu machen, dass die Frage, ob etwas geht oder nicht, möglichst nicht mit dem Auslösen einer
Exception geklärt wird.
Muss ich mir im vorliegenden Fall aber noch mal überlegen. Ist ja eher unwahrscheinlich, dass die zu durchsuchenden Dateien gesperrt sind, insofern könnte das "doppelte" öffnen tatsächlich mehr Zeit kosten, als der (evtl.)" Wurf von einigen Exceptions.
If ( CheckIfExists = true ) and ...
Warum nicht viel lesbarer
if CheckIfExists and ...
?
Jupp, das war ein Rest von was anderem, ist schon weg