Mam funkcję, która sprawdza, czy nazwa przekazanego pliku to .
lub ..
. Ale nie wiem, jak właściwie to nazwać. Coś takiego IsCurrentOrParentDirectory()
jest niejednoznaczne, ponieważ funkcja przyjmuje nazwę pliku, a nie pełną ścieżkę. (Intuicyjnie inny programista spodziewałby się, że przejdzie, /usr/
kiedy ja /usr/
wrócę true
, choć tak nie jest.)
Czy istnieje termin techniczny dla tych pozycji katalogu? Jeśli istnieje, co to jest?
path
technical-writing
Max Truxa
źródło
źródło
.
i..
są nazwami plików zgodnymi ze standardem POSIX. Zobacz mój cytat poniżej. Powiedziałbym, że tutaj jest dobrze, ponieważ dotyczy ogólnych pojęć komputerowych.foo.bar
,foo
...), ale nie ścieżkę (foo/bar
,/foo/
...). Ale ponieważ katalogi, łącza itp. Również są plikami, zostawię to w ten sposób.Odpowiedzi:
Ze standardu POSIX :
Tak naprawdę, jeśli chcesz sprawdzić, czy nazwa pliku jest,
.
czy..
musisz ją wywołaćIsDotOrDotDot()
, albo używając terminologii POSIX do rozwiązywania nazw ścieżekIsPredecessorOrParentOfPredecessor()
, a może nawetPointsToPredecessorOrParentOfPrecedessor()
… masz pomysł. Problem polega na tym, że ta ostatnia terminologia ma sens tylko w przypadku patrzenia na pełne ścieżki. Ale i tak nikt tego nie zrozumie.Biorąc to pod uwagę
.
i..
są to prawidłowe nazwy plików (po prostu interpretowane inaczej), powinieneś trzymać się tego, co masz, opierając się na znaczeniu, a nie na tym, jak są one nazywane wewnętrznie.źródło
.bash_history
kropką czy nie kropką? Nie jestem pewien, czy nazwa tej funkcji jest bardziej opisowa niż otwarta propozycja OP..
albo..
i nie, czy to po prostu zaczęło się.
. Oczywiście nazwa funkcji OP jest bardziej opisowa; Właśnie wskazałem mu, jak to technicznie się nazywa.IsDotOrDotDot()
zasadzie nic nie mówi o tym, co ta funkcja robi.IsDotOrDotDot
. Każdy, kto zna się na koncepcjach systemów plików, natychmiast to zrozumie. Można dyskutować, czy.bash_history
jest to „kropka”, ponieważ nie podano kontekstu dla znaczenia „kropka”, ale zdecydowanie NIE jest to „kropka lub kropka”..
i..
są zwykle używane do opisania ścieżek względnych w porównaniu z absolutnymi/usr
. Użyłbym tej różnicy i zadeklarowałbym funkcję jakoIsRelativeCurrentOrParentDirectory()
.Pamiętaj, że odniesienia do kropek mogą występować w dowolnym miejscu na ścieżce. Co
/usr/local/..
?źródło
Standard POSIX, który slhck ♦ użytecznie zacytował, mówi:
(podkreślenie dodane). Chociaż nie jest to do końca techniczne , wygląda na to, że „specjalna nazwa pliku” może być oficjalną nazwą. Użytkownicy prawdopodobnie zrozumieć, jeśli nazywa czynność którekolwiek z poniższych kryteriów:
IsSpecialDirectory()
,IsSpecialFilename()
lub po prostuIsSpecialName()
.Albo można iść z
IsStandardDirectory()
,IsStandardFilename()
lubIsStandardName()
. Jest to zgodne z konwencją nazewnictwa uniksowego (standardowe wejście, standardowe wyjście) dla rzeczy, które są ustalane automatycznie (w tym przypadku przezmkfs
imkdir
).IsAutomatic…()
lubIsDefault…()
z drugiej strony prawdopodobnie nie są wystarczająco intuicyjne.źródło
IsMagicDirectory()
bardzo zbliżone do tego, ale myślę, że twoje sformułowanie jest o wiele bardziej intuicyjne i odpowiednie (zwłaszcza, że używa ustalonych konwencji nazewnictwa). UżycieIsSpecialFileName
spowoduje nawet, że funkcja nie otrzyma ścieżki, ale nazwę pojedynczego pliku (lub katalogu, łącza itp.).IsSpecialFile()
byłaby zła sugestia. Ale nie zasugerowałem tego; I zasugerowałIsSpecialFilename()
. Choć nazwysda1
,console
,kmem
,myfifo
iurandom
sugerują, że nie są zastrzeżone i nie są z natury wyjątkowy. Ale.
i..
są z natury specjalnymi nazwami plików .Jedynym znanym mi terminem ze świata * nix jest
CWD
bieżący katalog roboczy. To jest dość często używane. Zobacz na przykład/proc/$$/cwd
link do katalogu, z którego uruchomiono polecenie.Nie znam żadnej standardowej nazwy
..
opróczdot-dot
i jak zauważył @slhck, nie jest to dobry wybór.źródło
Posix jest dość dwuznaczny, mówiąc o relacjach katalogu rodzic-dziecko. Jak powiedzieli inni,
.
/..
nie jest pomocny podczas rozmowy lub komunikacji z innymi ludźmi.Struktury plików można traktować jako strukturę danych drzewa. Tutaj ogólnie „rodzic” i „dziecko” lub „córka” są wystarczające do przekazania znaczenia. Zobaczysz, że podręczniki struktury danych noszą tę konwencję
Alternatywnie wydaje się, że drzewa można mówić o „drzewie w górę” i „w dół”. Zgodnie z konwencją „góra” oznacza bliżej katalogu głównego, a „dół” odnosi się do dziecka (dzieci).
Myślę, że albo można,
IsCurrentOrUp()
alboIsCurrentOrParent()
można uznać, dobrą praktykę w zakresie nazewnictwa funkcji.źródło