Wenn ich Pfade und Dateinamen manipuliere, gerate ich immer wieder in Knoten, weil ich kein gemeinsames Benennungssystem habe, das ich verwende.
Ich muss mir einen Namensstandard ausdenken und mich daran halten, und ich möchte klar und konsequent mit anderen sein, also öffne ich mich, um die kanonischen Antworten zu lernen.
Betrachten Sie dieses Spielzeugproblem: (Windows-Beispiel, aber hoffentlich sollte die Antwort plattformunabhängig sein)
Sie haben den vollständigen Namen eines Ordners erhalten: C: \ users \ OddThinking \ Documents \ My Source. Sie möchten die darunter liegenden Ordner durchsuchen und alle .src zu .obj kompilieren.
Irgendwann sehen Sie sich die folgende Zeichenfolge an.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
Welche Bezeichnernamen würden Sie für die Teile verwenden?
A) foo
B) foo.src
C) src
D) .src
E) C:\users\OddThinking\Documents\My Source\ - i.e. the top of the tree.
F) Widget\foo.src - i.e. the path from the top of the tree to the leaf.
G) Widget - i.e. one node of the tree.
H) C:\users\OddThinking\Documents\My Source\Widget\ - i.e. the name of the folder
I) C:\users\OddThinking\Documents\My Source\Widget\foo.src
Lassen Sie mich einige Antworten geben, um Ihnen den Einstieg zu erleichtern.
A) Basisname?
B) Dateiname? Oder ist es Dateiname? Der Unterschied ist wichtig bei der Auswahl von Bezeichnernamen, und ich bin hier nie konsistent.
C) Verlängerung
D) Verlängerung. Warten Sie, so habe ich C genannt. Sollte ich es vermeiden, den Punkt zu speichern, und ihn bei Bedarf einfach eingeben? Was ist, wenn eine bestimmte Datei keinen Punkt enthält?
H) Pfadname? Oder warten Sie, ist es nur der Weg?
I) Dateiname. Warten Sie, so habe ich C. Path genannt. Warten Sie, so habe ich H genannt. Vielleicht sollte H der Ordnername sein. Ist "Ordner" jedoch kein Windows-spezifischer Begriff?
quelle
stem
.Antworten:
Ich denke, Ihre Suche nach einer "Standard" -Namenskonvention wird vergebens sein. Hier sind meine Vorschläge, die auf bestehenden, bekannten Programmen basieren:
A) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo .src
B) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
C) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo. src (ohne Punkt)
D) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo .src (mit Punkt)
E) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
F) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
G) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
H) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
I) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
quelle
1.
(Dateiname nur ohne Erweiterung) habe ich mich vorFile Title
langer Zeit entschieden, weil es keine klare Konvention oder zumindest keinen globalen Konsens gibt.A
(Dateiname ohne Erweiterung) können Sie verwendenstem
. Referenzen: doc.rust-lang.org/std/path/struct.Path.html#method.file_stem , llvm.org/docs/doxygen/html/… , boost.org/doc/libs/1_60_0/libs/filesystem/ doc /…Gute Frage zuallererst, meine +1. Dieses Ding hat mich gestört, als ich einmal eine Reihe von Funktionen in der Utility-Klasse erstellen musste. GetFileName? oder GetFullName? GetApplicationPath bedeutet vollständiger Pfad oder Verzeichnisname? und so weiter. Ich komme aus dem .NET-Hintergrund, daher denke ich, dass ich der ansonsten hervorragenden Antwort von @blinry etwas mehr hinzufügen kann.
Zusammenfassung: (Kursiv ist das, was ich als Programmierer nicht verwenden würde)
Pfad : Der Pfad gibt einen eindeutigen Speicherort im Dateisystem an (außer dem relativen Pfad). Der Pfadname wird seltener verwendet, aber ich würde mich an den Pfad halten - er erklärt ziemlich genau, was er ist. Der Pfad kann auf eine Datei oder einen Ordner oder gar nichts verweisen (C: \). Pfad kann sein:
My Source\Widget\
ist sowohl der relative Pfad als auchWidget\foo.src
. Selbsterklärend.C:\users\OddThinking\Documents\My Source\Widget\foo.src
ist daher voller Weg. Sehen Sie am Ende, was ich als vollständigen Pfad bezeichne, der auf eine Datei verweist und als Verzeichnis endet.Die Wiki-Seite und die .NET-Benennung für den Pfad sind konsistent.
Stammpfad oder Stammverzeichnis : Ersteres ist die .NET-Konvention, während letzteres in UNIX-Kreisen häufiger zu hören ist. Obwohl ich beide mag, benutze ich eher die ersteren. In Windows gibt es im Gegensatz zu UNIX viele verschiedene Stammpfade, einen für jede Partition. Unix-Systeme haben ein Stammverzeichnis, das Informationen zu anderen Verzeichnissen und Dateien enthält. Z.B.
C:\
ist der Wurzelpfad.Ordner oder Ordnername :
Widget
,OddThinking
usw. in Ihrem Fall. Dies könnte eine Konvention nur für Windows sein (in der Tat ist es mein eigenes seltsames Denken :)), dennoch lehne ich die Antwort von blinry "Directory" nachdrücklich ab. Obwohl ein normales Benutzerverzeichnis dasselbe bedeutet wie ein Ordner (wie Unterordner, Unterverzeichnisse), sollte "Verzeichnis" aus technischer Sicht wie eine qualifizierte Adresse für das Ziel und nicht für das Ziel selbst klingen. Mehr unten.users
OddThinking
undDocuments
sind Unterordner.users
OddThinking\
,OddThinking\Documents\
undOddThinking\Documents\My Source\Widget\
sind Unterverzeichnisse. Aber wir müssen uns nicht oft darum kümmern, oder?users
OddThinking
ist ein untergeordneter Ordner (sowie Unterordner)OddThinking
users
ist der übergeordnete Ordner (nur verschiedene Terminologien erwähnen, keine große Sache).Verzeichnis oder Verzeichnisname : Ersteres wird allgemein im wirklichen Leben verwendet, letzteres wird im Code verwendet. Dies bezieht sich auf den vollständig qualifizierten Pfad (oder einfach den vollständigen Pfad ) bis zum übergeordneten Ordner des Ziels . In Ihrem Fall
C:\users\OddThinking\Documents\My Source\Widget
(Ja, ein Verzeichnis soll niemals auf eine Datei verweisen). Ich verwende den Verzeichnisnamen in meinem Code, da Verzeichnis eine Klasse in .NET ist und Verzeichnisname das ist, was die Bibliothek selbst nennt. Es stimmt ziemlich gut mit dem in UNIX-Systemen verwendeten Verzeichnisnamen überein .Dateiname oder Basisname : Name der Datei zusammen mit der Erweiterung. In Ihrem Fall :
foo.src
. Ich würde sagen, dass ich für eine nicht technische Verwendung den Dateinamen bevorzuge (was es für einen Endbenutzer bedeutet), aber für technische Zwecke würde ich mich strikt an den Basisnamen halten . Dateiname wird häufig von MS verwendet, aber ich bin überrascht, dass sie nicht nur in der Dokumentation, sondern auch in der Bibliothek konsistent sind . Dort kann Dateiname entweder Basisname oder vollständiger Pfad der Datei bedeuten. Also bevorzuge ich den Basisnamen, so nenne ich sie im Code. Diese Seite im Wiki sagt auch, dass der Dateiname entweder den vollständigen Pfad oder den Basisnamen bedeuten kann. Überraschenderweise kann ich sogar in .NET den Verwendungsbasisnamen finden, der den Stammnamen der Datei bedeutet.Erweiterung oder Dateierweiterung oder Dateierweiterung : Ich mag die letzte. Alles bezieht sich auf dasselbe, aber was es ist, ist wieder eine Frage der Debatte! Das Wiki sagt, dass
src
ich mich damals daran erinnere, dass viele der Sprachen es so interpretiert haben.src
. Beachten Sie den Punkt. Ich nehme also wieder einmal an, für gelegentliche Zwecke spielt es keine Rolle, was es ist, aber als Programmierer sehe ich Erweiterung immer als.src
.Ok, ich habe vielleicht versucht, einige Standardverwendungen abzurufen, aber hier sind zwei meiner Konventionen, denen ich folge. Und es geht um volle Wege.
Im Allgemeinen nenne ich einen vollständigen Pfad, der auf eine Datei verweist, als Dateipfad . Für mich ist der Dateipfad eindeutig und sagt mir, was er ist. Obwohl ich den Dateinamen als Dateinamen finde, nenne ich ihn in meinem Code Dateiname . Es ist auch konsistent mit " Verzeichnisname ". Von der technischen Seite bezieht sich der Name auf den vollständig qualifizierten Namen! Frustrierenderweise verwendet .NET den Begriff Dateiname (daher habe ich hier meinen Fall) und manchmal den Dateipfad dafür.
Ich nenne einen vollständigen Pfad, der als Verzeichnis endet, ein Verzeichnis. Tatsächlich kann man jede Adresse, die nicht auf eine Datei verweist, als Verzeichnis bezeichnen. So
C:\users\OddThinking\Documents\My Source\
ist ein Verzeichnis,C:\users\OddThinking\
ist ein Verzeichnis oder sogarOddThinking\Documents\My Source\
(besser es Unterverzeichnis oder noch besser relativer Pfad zu nennen - alles, was von dem Kontext abhängt, mit dem Sie es zu tun haben). Gut oben habe ich etwas anderes über das Verzeichnis erwähnt, nämlich den Verzeichnisnamen. Hier ist meine Meinung dazu: Ich werde einen neuen Weg finden, um Verwirrung zu vermeiden. Was ist dasD:\Fruit\Apple\Pip\
? Ein Verzeichnis. Aber wenn die Frage ist, wie lautet das Verzeichnis oder noch besser der VerzeichnisnameD:\Fruit\Apple\Pip\
, lautet die AntwortD:\Fruit\Apple\
. Hoffe es ist klar.Ich würde sagen, es ist besser, sich keine Sorgen um die letzten beiden Begriffe zu machen, da dies (für mich persönlich) die größte Verwirrung stiftet. Verwenden Sie einfach den Begriff vollständiger Pfad !
Um Ihnen zu antworten:
in Bezug auf den Weg, den Sie gegeben haben
A) Keine Ahnung. Jedenfalls musste ich diesen nie alleine bekommen.
B) Basisname
C) Ich würde es vorerst nur als Dateierweiterung bezeichnen. Ich mache mir am wenigsten Sorgen, da ich das nie alleine brauchte, um es in meinem Code zu benennen.
D) Dateierweiterung sicher.
E) Ich denke nicht, dass dies eine allgemeine Anforderung ist. Keine Ahnung. In .NET ist das Basisverzeichnis mit dem Verzeichnisnamen identisch.
F) relativer Pfad
G) Ordner (übergeordneter Ordner zum Basisnamen
foo.src
)H) Verzeichnisname
I) vollständiger Pfad (oder sogar Dateiname)
im Allgemeinen (tut mir leid, dass ich ein bisschen wortreich bin, nur um den Punkt nach Hause zu bringen), aber vorausgesetzt
foo.src
handelt sich tatsächlich um eine DateiA) NA
B) Basisname
C) NA
D) Verlängerung
E) Verzeichnis oder einfach Pfad
F) relativer Pfad
G) NA
H) Verzeichnis oder einfach Pfad
I) vollständiger Pfad (oder sogar Dateiname)
Weiter fahren mit einem Beispiel von meiner Seite:
Betrachten Sie den Pfad
C:\Documents and Settings\All Users\Application Data\s.sql
.C:\Documents and Settings\All Users\Application Data\s.sql
ist der vollständige Pfad (der ein Dateiname ist)C:\Documents and Settings\All Users\Application Data\
ist der Verzeichnisname.Betrachten Sie nun den Pfad
C:\Documents and Settings\All Users\Application Data
C:\Documents and Settings\All Users\Application Data
ist der vollständige Pfad (der zufällig ein Verzeichnis ist)C:\Documents and Settings\All Users
ist der Verzeichnisname.Zwei meiner Tipps:
Ich befolge diese Faustregel: Wenn es darum geht, eine vollständige Adresse unabhängig von ihrem Typ zu adressieren, nenne ich sie fast immer "vollständiger Pfad". Dies eliminiert nicht nur die Verwendung von zwei Terminologien für Dateipfad und Ordnerpfad, sondern vermeidet auch die mögliche Verwirrung, wenn Sie die Datei als Dateinamen benennen (was für die meisten Benutzer sofort in einen Basisnamen übersetzt wird). Aber ja, wenn Sie den Pfadtyp genau angeben müssen, ist es besser, den Dateinamen oder das Verzeichnis anstelle des allgemeineren "Pfads" zu benennen.
Was auch immer es ist, Sie würden Ihre eigene Idee im Sinn haben, seien Sie durchweg damit einverstanden. Haben Sie unter den Teammitgliedern einen Konsens darüber, dass dies dies und nicht das bedeutet.
Jetzt, wo ich nur aus dem Kreis komme, habe ich etwas Übung. Eine neue Marke von Begriffen wäre das, was auf OS X- und Android-Computern verwendet wird. Und all dies sind nur physische Pfade im Dateisystem. Bei Webadressen würde sich eine völlig neue Terminologie ergeben. Ich erwarte, dass jemand die Lücke in demselben Thread füllt :) Ich würde mich freuen, die Konvention zu hören, mit der Sie fortgefahren sind.
quelle
In C ++ hat Boost.Filesystem eine Nomenklatur für die verschiedenen Teile eines Pfads entwickelt. Siehe den Weg Zersetzung Referenzdokumentation für Details, sowie dieses Tutorial .
Hier ist eine Zusammenfassung basierend auf dem Tutorial. Zum:
c:\foo\bar\baa.txt
/foo/bar/baa.txt
du erhältst:
C ++ - Standard ISO / IEC 14882: 2017
Darüber hinaus wurde die Boost.Filesystem-Terminologie von C ++ 17 übernommen => Siehe
std::filesystem
quelle
path
,fullpath
?stem()
aber ein Teil des Dateinamens , nicht der Pfad .Die
pathlib
Standardbibliothek von Python bietet eine hervorragende Namenskonvention für Pfadkomponenten: https://docs.python.org/3/library/pathlib.htmla) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo .src
b) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
c) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo. src (ohne Punkt)
d) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo .src (mit Punkt)
e) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
f) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
g) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
h) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
i) C: \ Benutzer \ OddThinking \ Dokumente \ Meine Quelle \ Widget \ foo.src
quelle
Nein, du bist nicht verrückt.
In Windows-Systemen wird der Pfad des Verzeichnisses, in dem sich die Datei befindet , manchmal als Pfad bezeichnet , so wie es von Anfang an war. So zum Beispiel
Der Unix / Linux-Ansatz ist viel logischer, und das haben alle oben erwähnt: Pfad einschließlich des Dateinamens selbst. Wenn Sie jedoch "call /?" In der Windows-Befehlszeile erhalten Sie Folgendes:
Es gibt also "nur Pfad" und "nur Dateiname". Gleichzeitig bezeichnen sie die gesamte Zeichenfolge als "vollständig qualifizierten Pfadnamen", der als Laufwerksbuchstabe plus Pfad plus Dateiname verstanden wird. Es gibt also keine wirkliche Wahrheit. Es ist zwecklos. Du wurdest betrogen.
Wie auch immer,
Zur Beantwortung Ihrer Frage
So würde ich Ihre Beispiele nennen:
ADEF haben keine einfachen Spitznamen. Und da PHP wahrscheinlich die bekannteste plattformübergreifende Sprache ist, versteht jeder "Basisname" und "Verzeichnisname", also würde ich mich an diese Benennung halten. Der vollständige Name ist ebenfalls offensichtlich. Der vollständige Pfad wäre etwas mehrdeutig, aber meistens bedeutet er genau dasselbe.
quelle