Wciąż manipuluję ścieżkami i nazwami plików, ponieważ nie mam wspólnego systemu nazewnictwa, którego używam.
Muszę wymyślić standard nazewnictwa i trzymać się go, a ja chciałbym być jasny i spójny z innymi, więc otwieram się, aby poznać kanoniczne odpowiedzi.
Rozważ ten problem z zabawkami: (przykład systemu Windows, ale mam nadzieję, że odpowiedź powinna być niezależna od platformy)
Otrzymałeś pełną nazwę folderu: C: \ users \ OddThinking \ Documents \ My Source. Chcesz przejść foldery poniżej i skompilować wszystkie pliki .src do .obj.
W pewnym momencie patrzysz na następujący ciąg.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
Jakich nazw identyfikatorów użyłbyś dla części?
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
Pozwól, że dam kilka odpowiedzi, aby zacząć.
A) nazwa podstawowa?
B) nazwa pliku? Czy to nazwa pliku? Różnica jest ważna przy wyborze nazw identyfikatorów i nigdy nie jestem tutaj konsekwentny.
C) Rozszerzenie
D) Rozszerzenie. Zaczekaj, tak nazywam C. Czy powinienem unikać przechowywania kropki i wkładać ją w razie potrzeby? Co jeśli nie ma kropki na określonym pliku?
H) nazwa ścieżki? A może poczekaj, czy to tylko ścieżka?
I) nazwa pliku. Czekaj, to właśnie nazwałem C. Path. Zaczekaj, to właśnie nazwałem H. Może H powinna być nazwą folderu. Czy „folder” nie jest terminem specyficznym dla systemu Windows?
stem
.Odpowiedzi:
Myślę, że poszukiwanie „standardowej” konwencji nazewnictwa będzie daremne. Oto moje propozycje oparte na istniejących, dobrze znanych programach:
A) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
B) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
C) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (bez kropki)
D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (z kropką)
E) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
F) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
G) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
H) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
I) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
źródło
1.
(nazwa pliku bez rozszerzenia)File Title
już dawno postanowiłem pójść z powodu braku jasnej konwencji lub przynajmniej globalnego konsensusu.A
(nazwa pliku bez rozszerzenia) możesz użyćstem
. Odnośniki: 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 /…Dobre pytanie przede wszystkim, moje +1. Ta sprawa mnie zepsuła, gdy musiałem raz stworzyć mnóstwo funkcji w klasie Utility. GetFileName? lub GetFullName? GetApplicationPath oznacza pełną ścieżkę lub nazwę katalogu? i tak dalej. Pochodzę z platformy .NET, więc myślę, że mogę dodać trochę więcej do doskonałej odpowiedzi @blinry.
Podsumowanie: (Kursywą jest to, czego nie użyłbym jako programista)
Ścieżka : Ścieżka określa unikalną lokalizację w systemie plików (chyba że jej ścieżka względna). Nazwa ścieżki jest rzadziej używana, ale trzymałbym się ścieżki - właściwie wyjaśnia, co to jest. Ścieżka może wskazywać plik lub folder, a nawet nic (C: \). Ścieżka może być:
My Source\Widget\
jest także ścieżką względnąWidget\foo.src
. Wyjaśniające.C:\users\OddThinking\Documents\My Source\Widget\foo.src
jest stąd pełna ścieżka. Zobacz na końcu, co nazywam pełną ścieżką, która wskazuje na plik i kończy się na katalog.Strona wiki i nazwa .NET dla ścieżki są spójne.
Root Path lub Root Directory : poprzednia konwencja .NET, podczas gdy ta ostatnia jest bardziej słyszalna w kręgach UNIX. Chociaż podoba mi się oba, częściej używam tego pierwszego. W systemie Windows, w przeciwieństwie do systemu UNIX, istnieje wiele różnych ścieżek katalogu głównego, po jednej dla każdej partycji. Systemy uniksowe mają jeden katalog główny, który zawiera informacje o innych katalogach i plikach. Na przykład.
C:\
jest ścieżka root.Folderu lub Nazwa folderu :
Widget
,OddThinking
itp w Twoim przypadku. Może to być konwencja tylko dla systemu Windows (w rzeczywistości jest to moje dziwne myślenie :)), jednak zdecydowanie sprzeciwiam się odpowiedzi Blinry'ego na „Directory”. Chociaż dla zwykłego katalogu użytkownika oznacza to samo co folder (jak podfoldery, podkatalogi), uważam, że z technicznego punktu widzenia „katalog” powinien brzmieć jak kwalifikowany adres do celu, a nie do samego celu. Więcej poniżej.users
OddThinking
iDocuments
są podfolderami.users
OddThinking\
,OddThinking\Documents\
iOddThinking\Documents\My Source\Widget\
są podkatalogi. Ale często nie musimy się tym przejmować, prawda?users
OddThinking
jest folder podrzędny (a także podfolder)OddThinking
users
jest folderem nadrzędnym (wystarczy wspomnieć o różnych terminologiach, nic wielkiego).Katalog lub nazwa katalogu : pierwszy z nich jest używany ogólnie w prawdziwym życiu, drugi to kod. Odnosi się to do w pełni kwalifikowanej ścieżki (lub po prostu pełnej ścieżki ) do folderu nadrzędnego celu . W twoim przypadku
C:\users\OddThinking\Documents\My Source\Widget
(Tak, katalog nigdy nie powinien wskazywać pliku). Używam nazwy katalogu w moim kodzie, ponieważ katalog jest klasą w .NET, a nazwa katalogu jest tym, co sama biblioteka nazywa. Jest dość spójny z nazwą katalogu używaną w systemach UNIX.Nazwa pliku lub Basename : nazwa pliku wraz z rozszerzeniem. W twoim przypadku:
foo.src
. Powiedziałbym, że do celów nietechnicznych wolę nazwę pliku (to jest to, co oznacza dla użytkownika końcowego), ale dla celów technicznych ściśle trzymałbym się nazwy basename . Nazwa pliku jest często używana przez MS, ale jestem zaskoczony, że nie są one spójne nie tylko w dokumentacji, ale nawet w bibliotece . Nazwa pliku może oznaczać basename lub pełną ścieżkę do pliku. Dlatego preferuję basename, tak nazywam je w kodzie. Ta strona na wiki również mówi, że nazwa pliku może oznaczać albo pełną ścieżkę, albo nazwę basenu. Zaskakująco, nawet w .NET mogę znaleźć użycie nazwy basename, co oznacza nazwę katalogu głównego pliku.Rozszerzenie lub rozszerzenie nazwy pliku lub rozszerzenie pliku : podoba mi się ten ostatni. Wszystko odnosi się do tej samej rzeczy, ale o to, co znowu jest przedmiotem debaty! Wiki twierdzi, że tak było
src
, ale pamiętam, że wiele języków interpretuje to jako.src
. Uwaga kropka. Więc po raz kolejny uważam, że dla zwykłych zastosowań nie ma znaczenia, co to jest, ale jako programista zawsze widzę rozszerzenie jako.src
.Ok, mogłem spróbować pobrać niektóre standardowe zastosowania, ale oto dwie z moich konwencji, których przestrzegam. I chodzi o pełne ścieżki.
Na ogół nazywam pełną ścieżkę wskazującą plik jako ścieżkę pliku . Dla mnie ścieżka pliku jest wyraźna, mówi mi, co to jest. Chociaż w nazwie pliku znajduję go jako nazwę pliku, w swoim kodzie nazywam go nazwą pliku . Jest to również zgodne z „ nazwą katalogu ”. Od strony technicznej nazwa odnosi się do w pełni kwalifikowanej nazwy! Frustrujące jest to, że .NET używa terminu nazwa pliku (więc mam tutaj swoją sprawę), a czasem ścieżki pliku.
Pełną ścieżkę nazywam katalogiem katalogiem. W rzeczywistości można nazwać dowolny adres, który nie wskazuje pliku, katalogiem. Podobnie
C:\users\OddThinking\Documents\My Source\
jak katalog,C:\users\OddThinking\
katalog, a nawetOddThinking\Documents\My Source\
(lepiej nazwać go podkatalogiem lub jeszcze lepszą ścieżką względną - wszystko zależy od kontekstu, z którym mamy do czynienia). Powyżej wspominałem coś innego o katalogu, którym jest nazwa katalogu. Oto moje zdanie na ten temat: znajdę nową ścieżkę, aby uniknąć zamieszania. Co toD:\Fruit\Apple\Pip\
jest Katalog. Ale jeśli pytanie brzmi, jaki jest katalog lub nawet lepsza nazwa kataloguD:\Fruit\Apple\Pip\
, odpowiedź brzmiD:\Fruit\Apple\
. Mam nadzieję, że to jasne.Powiedziałbym, że lepiej nie martwić się o ostatnie dwa warunki, ponieważ to powoduje najwięcej zamieszania (dla mnie osobiście). Wystarczy użyć terminu pełna ścieżka !
Aby odpowiedzieć:
w odniesieniu do ścieżki, którą podałeś
A) Nie mam pojęcia. W każdym razie nigdy nie musiałem sam tego robić.
B) basename
C) Na razie nazwałbym to rozszerzeniem pliku, jestem najmniej zmartwiony, ponieważ nigdy nie potrzebowałem tego samego w nazwie kodu.
D) rozszerzenie pliku na pewno.
E) Nie sądzę, że jest to wymóg ogólnego celu. Brak pomysłu. W katalogu podstawowym .NET jest taka sama jak nazwa katalogu.
F) ścieżka względna
G) folder (folder nadrzędny do basename
foo.src
)H) nazwa katalogu
I) pełna ścieżka (lub nawet nazwa pliku)
ogólnie (przepraszam za to, że jestem trochę gadatliwy, tylko po to, by doprowadzić do sedna sprawy), ale zakładanie,
foo.src
że to plikA) NA
B) basename
C) NA
D) rozszerzenie
E) katalog lub po prostu ścieżka
F) ścieżka względna
G) NA
H) katalog lub po prostu ścieżka
I) pełna ścieżka (lub nawet nazwa pliku)
Dalsza jazda z jednym przykładem z mojej strony:
Rozważ ścieżkę
C:\Documents and Settings\All Users\Application Data\s.sql
.C:\Documents and Settings\All Users\Application Data\s.sql
to pełna ścieżka (która jest nazwą pliku)C:\Documents and Settings\All Users\Application Data\
to nazwa katalogu.Teraz rozważ ścieżkę
C:\Documents and Settings\All Users\Application Data
C:\Documents and Settings\All Users\Application Data
jest pełną ścieżką (która jest katalogiem)C:\Documents and Settings\All Users
to nazwa katalogu.Dwie moje wskazówki:
Stosuję się do ogólnej zasady, że jeśli chodzi o adresowanie pełnego adresu, niezależnie od jego rodzaju, prawie zawsze nazywam go „pełną ścieżką”. To nie tylko eliminuje użycie dwóch terminologii dla ścieżki pliku i ścieżki folderu, ale także pozwala uniknąć potencjalnego zamieszania, jeśli zamierzasz nazwać ten plik jako nazwę pliku (co dla większości użytkowników od razu przekłada się na basename). Ale tak, jeśli musisz sprecyzować rodzaj ścieżki, lepiej nazwać ją nazwą pliku lub katalogiem zamiast bardziej ogólnej „ścieżki”.
Cokolwiek byś nie pomyślał, bądź z nim zgodny. Mieć porozumienie między członkami zespołu, że to oznacza to, a nie to.
Teraz, gdy tylko z kręgu mam trochę praktyki. Nowa marka terminów byłaby używana na komputerach z systemem OS X i Android. Wszystko to dotyczy fizycznych ścieżek w systemie plików. W przypadku adresów internetowych pojawiłby się zupełnie nowy zestaw terminologii. Oczekuję, że ktoś wypełni pustkę w tym samym wątku :) Z przyjemnością usłyszę konwencję, z którą poszliście.
źródło
W C ++ Boost.Filesystem opracował nomenklaturę dla różnych części ścieżki. Szczegółowe informacje zawiera dokumentacja referencyjna dekompozycji ścieżki , a także ten samouczek .
Oto podsumowanie oparte na samouczku. Dla:
c:\foo\bar\baa.txt
/foo/bar/baa.txt
dostajesz:
Norma C ++ ISO / IEC 14882: 2017
Ponadto terminologia Boost.Filesystem została przyjęta przez C ++ 17 => Patrz
std::filesystem
źródło
path
,fullpath
?stem()
jest częścią nazwy pliku , a nie ścieżki .pathlib
Standardowa biblioteka Pythona ma świetną konwencję nazewnictwa dla komponentów ścieżki: https://docs.python.org/3/library/pathlib.htmla) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
b) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (bez kropki)
d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (z kropką)
e) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
f) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
g) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
h) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
i) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
źródło
Nie, nie jesteś szalony.
W systemach Windows czasami ścieżka katalogu zawierającego plik nazywa się ścieżką i tak właśnie było od samego początku. Na przykład
Podejście Unix / Linux jest o wiele bardziej logiczne i wszyscy o tym wspominali wyżej: ścieżka zawierająca samą nazwę pliku. Jeśli jednak wpiszesz „zadzwoń /?” w wierszu polecenia systemu Windows otrzymujesz:
Oto „tylko ścieżka” i „tylko nazwa pliku”. Jednocześnie odnoszą się do całego ciągu jako „w pełni kwalifikowanej nazwy ścieżki”, która jest rozumiana jako litera dysku plus ścieżka plus nazwa pliku. Więc nie ma prawdziwej prawdy. To daremne. Zostałeś zdradzony.
Tak czy siak,
Odpowiedzieć na Twoje pytanie
Oto jak nazwałbym twoje przykłady:
ADEF nie ma prostych pseudonimów. A ponieważ php jest prawdopodobnie najbardziej znanym językiem wieloplatformowym, wszyscy rozumieją „basename” i „dirname”, więc trzymam się tej nazwy. Pełna nazwa jest również oczywista; pełna ścieżka byłaby nieco niejednoznaczna, ale przez większość czasu oznacza to to samo.
źródło