Warum gibt die Methode „Datei existiert“ in vielen Sprachen „true“ für ein Verzeichnis zurück?

StackOverflow https://stackoverflow.com/questions/50148

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.

War es hilfreich?

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ück
  • is_file() gibt TRUE für Dateien zurück, aber FALSE für Verzeichnisse und Sym-Links
  • is_dir() gibt TRUE für Verzeichnisse, aber FALSE für Dateien und Sym-Links zurück
  • is_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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top