Ein absoluter Pfad ist also ein Weg, um zu einer bestimmten Datei oder einem bestimmten Speicherort zu gelangen, der bzw. der den vollständigen Weg dorthin, den vollständigen Pfad und das Betriebssystem beschreibt (die absoluten Pfade für Windows und Linux sind beispielsweise unterschiedlich). Ein relativer Pfad ist ein Route zu einer Datei oder einem Speicherort, die bzw. der vom aktuellen Speicherort aus beschrieben wird. (zwei Punkte) zeigt eine übergeordnete Ebene im Verzeichnisbaum an. Das ist mir seit einigen Jahren klar.
Bei der Suche habe ich sogar gesehen, dass es auch kanonisierte Dateien gibt! Alles was ich weiß ist CANONICAL bedeutet so etwas wie "nach den Regeln" oder so.
Kann mich jemand in theoretischen Fragen über kanonische Dinge aufklären?
quelle
Antworten:
Der springende Punkt, etwas "kanonisch" zu machen, ist, dass Sie zwei Dinge vergleichen können. Beispielsweise beziehen sich beide
../../here/bar/x
und./test/../../bar/x
möglicherweise auf denselben Speicherort, Sie können jedoch keinen Textvergleich für die beiden Pfade durchführen. Wenn Sie sie jedoch in ihre kanonische Darstellung verwandeln, werden sie beide../bar/x
, und wir sehen, dass sie sich tatsächlich auf dasselbe beziehen.Kurz gesagt, es gibt oft viele Möglichkeiten, sich auf eine Sache zu beziehen, und in diesem Fall können Sie möglicherweise eine kanonische Darstellung definieren, die einzigartig ist und die es Ihnen ermöglicht, Sammlungen solcher Dinge in den Griff zu bekommen.
(Wenn Sie nach weiteren Beispielen suchen, ist die gesamte Mathematik voll von "kanonischen" Konstruktionen für alle Arten von Objekten und sehr zum gleichen Zweck. Vielleicht kann dieser Wikipedia-Artikel einige zusätzliche Anweisungen geben.)
quelle
Ein guter Weg, um einen kanonischen Pfad zu definieren, ist:
the shortest absolute path
(kurz, im Sinne der Zeichenfolgenlänge).Dies ist ein Beispiel für den Unterschied zwischen einem absoluten Pfad und einem kanonischen Pfad:
absoluter Pfad:
C:\abc\..\abc\file.txt
kanonischer Pfad:
C:\abc\file.txt
quelle
Was ein kanonischer Pfad ist (oder sein Unterschied zu einem absoluten Pfad), ist systemabhängig.
Wenn ein (vollständiger) Pfad Aliase, Verknüpfungen oder symbolische Links enthält, löst der kanonische Pfad all diese normalerweise in die tatsächlichen Verzeichnisse auf, auf die sie verweisen.
Beispiel: Wenn
/bin/a
es sich um einen Sym-Link handelt, können Sie ihn überall dort finden, wo Sie einen absoluten Pfad anfordern, z. B. in java.io.File # getAbsolutePath, während die reale Datei (dh das eigentliche Ziel des Links)usr/local/bin/a
als kanonischer Pfad zurückgegeben wird, z von java.io.File # getCanonicalPathquelle
Die meisten Probleme mit kanonischen Pfaden treten auf, wenn Sie den Namen eines Verzeichnisses und nicht einer Datei übergeben. Wenn wir für die Datei einen absoluten Pfad angeben, ist dies auch der kanonische Pfad. Aber für dir bedeutet es, das letzte "/" wegzulassen. Zum Beispiel ist "/ var / tmp / foo" ein kanonischer Pfad, "/ var / tmp / foo /" nicht.
quelle