Dateisysteme sind flüchtig. Das bedeutet, dass man sich nicht darauf verlassen kann, dass das Ergebnis einer Operation auch für die nächste gültig ist, selbst wenn es sich um die nächste Codezeile handelt. Sie können nicht einfach sagen if (some file exists and I have permissions for it) open the file
und man kann nicht sagen if (some file does not exist) create the file
. Es besteht immer die Möglichkeit, dass das Ergebnis Ihrer if
Zustand wird ändern zwischen den beiden Teilen Ihres Codes. Die Operationen sind getrennt: nicht atomar.
Erschwerend kommt hinzu, dass die Art des Problems bedeutet, dass Sie, wenn Sie versucht sind, diese Prüfung vorzunehmen, wahrscheinlich bereits besorgt sind oder sich bewusst sind, dass etwas, das Sie nicht kontrollieren können, mit der Datei passieren könnte. Aufgrund der Beschaffenheit von Entwicklungsumgebungen ist es unwahrscheinlich, dass dieses Ereignis während Ihrer Tests auftritt und sehr schwer zu reproduzieren. Sie haben also nicht nur einen Fehler, sondern der Fehler wird beim Testen auch nicht auftauchen.
Daher ist es unter normalen Umständen am besten, gar nicht erst zu versuchen zu prüfen, ob eine Datei oder ein Verzeichnis existiert. Stecken Sie Ihre Entwicklungszeit stattdessen in die Behandlung von Ausnahmen aus dem Dateisystem. Sie müssen diese Ausnahmen ohnehin behandeln, so dass dies eine viel bessere Nutzung Ihrer Ressourcen ist. Auch wenn Ausnahmen langsam sind, erfordert die Überprüfung der Existenz einer Datei einen zusätzlichen Zugriff auf die Festplatte, und der Zugriff auf die Festplatte ist viel langsamer. Ich habe sogar ein gut gewähltes respuesta in einer anderen Frage zu diesem Thema.
Aber ich habe einige Zweifel. In .Net, zum Beispiel, wenn das wirklich ist immer wahr, die .Exists()
Methoden wären gar nicht erst in die API aufgenommen worden. Denken Sie auch an Szenarien, in denen Sie erwarten die Ihr Programm zum Erstellen der Datei benötigt. Das erste Beispiel, das mir in den Sinn kommt, betrifft eine Desktop-Anwendung. Diese Anwendung installiert eine Standard-Benutzerkonfigurationsdatei in ihrem Home-Verzeichnis, und beim ersten Start der Anwendung kopiert jeder Benutzer diese Datei in den Anwendungsdatenordner des jeweiligen Benutzers. Es wird erwartet, dass die Datei beim ersten Start nicht vorhanden ist.
Wann ist es also akzeptabel, im Voraus zu prüfen, ob eine Datei vorhanden ist (oder andere Attribute wie Größe und Berechtigungen)? Ist es eine ausreichend gute Faustregel, beim ersten Versuch eher einen Fehlschlag als einen Erfolg zu erwarten?