Warum gibt die Methode „Datei existiert“ in vielen Sprachen „true“ für ein Verzeichnis zurück?
-
09-06-2019 - |
Frage
Ich weiß, dass es in PHP funktioniert, und ich bin mir ziemlich sicher, dass es in Java funktioniert.Ich habe nicht die neuesten Versionen von .NET verwendet, daher werde ich nicht für sie sprechen.Es scheint sehr umständlich, aber ich habe mich gefragt, ob es dafür einen Grund gibt.
Lösung
Ein Grund ist die Kompatibilität – jeder, der die Prüfung auf Existenz durchgeführt hat, weiß, wie man Verzeichnisse ausschließt;Eine Änderung dieses Verhaltens kann diejenigen verwirren, die sich auf dieses Verhalten verlassen.
Zweitens überprüft der zugrunde liegende Code häufig das Betriebssystem auf das Vorhandensein in einem Katalog von Dateisystemeinträgen – für das Betriebssystem ist ein Verzeichnis dasselbe wie eine Datei.Mit anderen Worten: Es wird nach einem Eintrag von „xyz“ im Katalog gesucht, nicht nach einer Datei mit dem Namen „xyz“ im Katalog.
Ich vermute, dass die Abwärtskompatibilität der Hauptgrund ist.
Andere Tipps
Es gibt auch einen formalen Grund, warum ein Verzeichnis eine Datei ist:
Dateien (oder Links zu Dateien) können befindet sich in Verzeichnissen.Es gibt jedoch noch mehr Im Allgemeinen kann ein Verzeichnis Folgendes enthalten: entweder eine Liste von Dateien oder eine Liste von Links zu Dateien.Im Rahmen dieser Definition, ist es von größter Bedeutung Wichtigkeit, dass der Begriff "Datei" schließt Verzeichnisse ein.Dies ermöglicht die Vorhandensein von Verzeichnishierarchien, d.h. Verzeichnisse, die Unterverzeichnisse.
Aus Wikipedia, 'Computerdatei'
Es ist üblich, eine „Datei existiert“-Funktion zu verwenden, um einen Pfad zu überprüfen, bevor darauf geschrieben wird.In diesem Anwendungsfall spielt der Dateityp keine Rolle. Wenn es ein Verzeichnis mit dem Namen „/home/foo“ gibt, können Sie keine Datei mit dem Namen „/home/foo“ erstellen.
Auch PHP, eine der von Ihnen genannten Sprachen, bietet mehrere Funktionen, je nachdem, welche Art von Datei Sie interessieren:
file_exists()
gibt TRUE für Dateien, Verzeichnisse und symbolische Links zurückis_file()
gibt TRUE für Dateien zurück, aber FALSE für Verzeichnisse und Sym-Linksis_dir()
gibt TRUE für Verzeichnisse, aber FALSE für Dateien und Sym-Links zurückis_link()
gibt TRUE für symbolische Links zurück, aber FALSE für Dateien und Verzeichnisse
Ein Teil der Unix-Philosophie ist, dass „alles ist eine Datei".Dies hat bis zu einem gewissen Grad auch andere Umgebungen beeinflusst.