파일 이름? 경로 이름? 기본 이름? 경로 조각의 이름 지정 표준


228

내가 사용하는 공통 명명 시스템이 없기 때문에 경로와 파일 이름을 조작 할 때 계속 매듭을 짓고 있습니다.

나는 명명 표준을 생각해 내고 그것을 준수해야하며 다른 사람들과 명확하고 일관성을 유지하기 위해 정식 답변을 배우기 위해 열어 가고 있습니다.

이 장난감 문제를 고려하십시오 : (Windows 예제이지만 플랫폼 독립적이어야합니다)

C : \ users \ OddThinking \ Documents \ My Source 폴더의 전체 이름이 지정되었습니다. 폴더를 아래로 걸어 모든 .src를 .obj로 컴파일하십시오.

어느 시점에서 다음 문자열을보고 있습니다.

C:\users\OddThinking\Documents\My Source\Widget\foo.src

부품에 어떤 식별자 이름을 사용 하시겠습니까?

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

시작하기 위해 몇 가지 답변을 드리겠습니다.

A) 기본 이름?

B) 파일 이름? 아니면 파일 이름입니까? 식별자 이름을 선택할 때 차이점이 중요하며 여기서는 일관성이 없습니다.

C) 확장

D) 확장. 잠깐, 그것이 내가 C라고 부르는 것입니다. 점을 저장하지 말고 필요할 때 입력해야합니까? 특정 파일에 점이 없으면 어떻게합니까?

H) 경로 이름? 아니면 그냥 경로입니까?

I) 파일 이름. 잠깐, 그것이 내가 C. Path라고 부르는 것입니다. 잠깐, 그것이 내가 H라고 부르는 것입니다. 아마도 H는 폴더 이름이어야합니다. 그러나 Windows 관련 용어 "폴더"가 아닙니까?


Microsoft의 기술 편집자 인 Mike Pope는 자신의 블로그 에서 Microsoft 스타일 가이드가 파일 이름, 폴더 이름, 볼륨 이름이라는 두 단어를 지속적으로 고수하지만 Apple 스타일 가이드는 때때로 파일 이름, 경로 이름, 볼륨 이름을 결합한다고 지적합니다. .
Oddthinking

A) basename은 경로의 마지막 항목 (파일의 경우 dirpath가없는 파일 이름이 됨)을 의미하기 위해 여러 곳에서 이미 사용되므로 반드시 basename이라고해서는 안됩니다. 일부 장소는 확장자없이 파일 이름을 호출합니다 stem.
wisbucky

또한 마침표가 여러 개인 파일 (예 : foo.src.txt)의 경우 확장명을 식별하고 명명하는 표준 방법이 있습니까?
user117529

답변:


178

"표준"명명 규칙에 대한 검색은 헛된 것 같습니다. 다음은 잘 알려진 기존 프로그램을 기반으로 한 제안입니다.

A) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src

Vim은 파일 루트 (: help filename-modifiers) 라고 부릅니다 .

B) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

파일 이름 또는 기본 이름

C) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (점없이)

파일 / 이름 확장자

D) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (점 포함)

또한 파일 확장자 . 파일에 점이 없으면 확장자가없는 점없이 간단히 저장하십시오.

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 \ 위젯 \ foo.src

트리의 하나의 노드는
규칙이 없으며 아마도 간단한 디렉토리

H) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

디렉토리 이름

I) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

전체 / 절대 경로


8
주제를 벗어난 것이지만 점과 분리 된 확장의 저장에주의하십시오. "foo", "foo"의 파일 이름을 처리해야합니다. 및 "foo.txt"(및 "foo.txt.bak")
Oddthinking

1
안녕하세요 여러분, 좋은 예입니다. 강제로 스크롤하는 참조를 사용하는 대신 질문 옆에 답을 넣으면 더 읽기 쉽습니다. 나는 그것을 개선하기 위해 편집을합니다. Grettings
빅터

3
빅터, 당신의 편집이 거부 된 이후 (wtf 얘들 아, 이것은 아주 좋은 개선입니다!) 방금 직접했습니다 :-)
blinry

1
의 경우 1.(만 확장자가없는 파일 이름), 내가 함께 가기로 결정 File Title으로 인해 글로벌 합의 명확한 규칙 또는 적어도 부족으로 오래 전에.
polyvertex

1
들어 A(확장자가없는 파일 이름), 당신은 사용할 수 있습니다 stem. 참조 : 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 /…
wisbucky

36

좋은 질문은 우선 +1입니다. Utility 클래스에서 한 번에 많은 함수를 만들어야 할 때이 문제가 발생했습니다. GetFileName? 또는 GetFullName? GetApplicationPath는 전체 경로 또는 디렉토리 이름을 의미합니까? 등등. 나는 .NET 배경에서 왔으므로 @blinry의 탁월한 대답에 조금 더 추가 할 수 있다고 생각합니다.

요약 : (이탤릭체는 프로그래머로 사용하지 않을 것입니다)

  1. 경로 : 경로는 파일 시스템에서 고유 한 위치를 지정합니다 (상대 경로가 아닌 경우). 경로 이름은 덜 자주 사용되지만 경로를 사용하면 경로가 무엇인지 거의 설명합니다. 경로는 파일이나 폴더를 가리킬 수도 있고 아무 것도 가리킬 수 없습니다 (C : \). 경로는 다음과 같습니다.

    1. 상대 경로 : My Source\Widget\뿐만 아니라 상대 경로 Widget\foo.src입니다. 자기 설명.
    2. 절대 경로 또는 전체 경로 : 대상을 가리키는 완전한 경로입니다. 나는 후자를 더 자주 사용하는 경향이 있습니다. C:\users\OddThinking\Documents\My Source\Widget\foo.src따라서 전체 경로입니다. 파일을 가리키고 디렉토리로 끝나는 전체 경로라고 부르는 것을 끝에서보십시오.

    위키 페이지 및 .NET 명명 경로가 일치한다.

  2. 루트 경로 또는 루트 디렉토리 : 이전은 .NET 규칙이며 후자는 UNIX 서클에서 더 많이 들립니다. 나는 둘 다 좋아하지만 나는 전자를 더 사용하는 경향이 있습니다. Windows에서는 UNIX와 달리 각 파티션마다 하나씩 다른 루트 경로가 있습니다. 유닉스 시스템에는 다른 디렉토리와 파일에 대한 정보를 보유하는 하나의 루트 디렉토리가 있습니다. 예 : C:\루트 경로입니다.

  3. 폴더 또는 폴더 이름 : Widget, OddThinking등 귀하의 경우. 이것은 Windows 전용 컨벤션 일 수 있지만 (실제로 내 자신의 이상한 생각 :)) 그럼에도 불구하고 나는 블링 리의 대답 "Directory"에 강력히 반대합니다. 일반 사용자 디렉토리를 의미하지만 같은 (하위 폴더, 하위 디렉토리 등) 폴더로, 나는 기술적 인 각도 "디렉토리가"대상이 아닌 대상 자체에 대한 자격을 갖춘 주소 같은 소리한다에서 생각합니다. 더 아래에.

    1. 하위 폴더 : 관하여에 users OddThinkingDocuments하위 폴더입니다.
    2. 하위 디렉토리 : 관련하여에 users OddThinking\, OddThinking\Documents\OddThinking\Documents\My Source\Widget\하위 디렉토리입니다. 그러나 우리는 종종 그것에 대해 신경 쓸 필요가 없습니다.
    3. 하위 폴더 : users OddThinking하위 폴더뿐만 아니라 하위 폴더도
    4. 상위 폴더 : For OddThinking users는 상위 폴더입니다 (단지 다른 용어를 언급하지만 별다른 의미는 없습니다).
  4. 디렉토리 또는 디렉토리 이름 : 전자는 일반적으로 실생활에서 사용하고 후자는 코드로 작성합니다. 대상의 상위 폴더 까지 정규화 된 경로 (또는 단순히 전체 경로 )를 나타냅니다 . 귀하의 경우 (예, 디렉토리는 파일을 가리 키지 않습니다). 디렉토리는 .NET의 클래스이고 디렉토리 이름은 라이브러리 자체가 호출하는 것이므로 코드에서 디렉토리 이름을 사용합니다. UNIX 시스템에서 사용되는 dirname 과 상당히 일치 합니다.C:\users\OddThinking\Documents\My Source\Widget

  5. File Name or Basename : 확장명과 함께 파일 이름. 귀하의 경우 : foo.src. 나는 기술적 인 용도가 아닌 경우 파일 이름 (최종 사용자에게 의미 하는 바)을 선호 하지만 기술적 목적을 위해 basename을 엄격하게 고수 할 것이라고 말합니다 . 파일 이름은 종종 MS에 의해 사용 되지만 문서뿐만 아니라 라이브러리에서도 일관성이있는 방법에 놀랐습니다 . 파일 이름은 기본 이름 또는 파일의 전체 경로를 의미 할 수 있습니다. 그래서 기본 이름을 선호합니다. 이것이 코드에서 호출되는 것입니다. 위키 의이 페이지 에서도 파일 이름은 전체 경로 또는 기본 이름을 의미 할 수 있다고 말합니다. 놀랍게도 .NET에서도 파일의 루트 이름을 의미하는 사용법 기본 이름을 찾을 수 있습니다.

  6. 확장자 또는 파일 이름 확장자 또는 파일 확장자 : 나는 마지막 것을 좋아합니다. 모두 똑같은 것을 언급하지만 다시 논란의 여지가 있습니다! Wiki 는 당시에는 src많은 언어가이 언어를 해석한다는 것을 읽은 것을 기억합니다 .src. 점을 참고하십시오. 다시 한 번, 내 테이크는, 캐주얼 사용의 경우 그것이 무엇인지는 중요하지 않지만 프로그래머는 항상 확장을로 간주 .src합니다.

    좋아, 표준 사용법을 가져 오려고했을 수도 있지만 다음은 내가 따르는 두 가지 규칙입니다. 그리고 그것은 전체 경로에 관한 것입니다.

    1. 나는 일반적으로 파일을 파일 경로 로 가리키는 전체 경로를 호출합니다 . 나에게 파일 경로가 명확하게 정리되어 있으면 그것이 무엇인지 알려줍니다. 파일 이름을 사용하면 파일 이름으로 찾을 수 있지만 내 코드에서는 파일 이름 이라고 부릅니다 . 또한 " directory name " 과 일치 합니다. 기술적 인 측면에서 name은 완전한 이름을 나타냅니다! 실망스럽게 .NET은 파일 이름이라는 용어를 사용하므로 때로는 여기에 파일 경로가 있습니다.

    2. 디렉토리로 끝나는 전체 경로를 디렉토리라고 부릅니다. 실제로 파일을 가리키는 디렉토리가 아닌 주소를 호출 할 수 있습니다. 그래서 C:\users\OddThinking\Documents\My Source\디렉토리가있다 C:\users\OddThinking\하더라도 디렉토리, 또는이다 OddThinking\Documents\My Source\(더 하위 디렉토리 또는 더 나은 상대 경로를 호출하기 - 당신이 다루고있는 상황에 따라 모든). 위에서 나는 디렉토리 이름 인 디렉토리에 대해 다른 것을 언급했습니다. 여기에 제가 취할 수있는 조치가 있습니다 : 혼란을 피할 수있는 새로운 길을 열겠습니다. 이게 뭐야 D:\Fruit\Apple\Pip\? 디렉토리. 그러나 질문이 디렉토리인지 또는 더 나은 디렉토리 이름인지에 D:\Fruit\Apple\Pip\대한 답은 D:\Fruit\Apple\입니다. 그것의 명확한 희망.

    나는 마지막 두 용어에 대해 걱정하지 않는 것이 좋습니다. 그것이 개인적으로 가장 혼란을 일으키는 것입니다. 전체 경로 라는 용어를 사용하십시오 !

대답하려면 :

  1. 당신이 주신 길과 관련하여

    A) 모르겠다. 어쨌든 나는 그 것을 혼자 가질 필요가 없었습니다.

    B) 기본 이름

    C) 나는 그것을 파일 확장명이라고 부를 것입니다. 내 코드에서 그 이름을 지정할 필요가 없기 때문에 걱정할 필요가 없습니다.

    D) 파일 확장자입니다.

    E) 이것이 일반적인 목적 요건이라고 생각하지 않습니다. 몰라. .NET에서 기본 디렉토리는 디렉토리 이름과 동일합니다.

    F) 상대 경로

    G) 폴더 (기본 이름의 상위 폴더 foo.src)

    H) 디렉토리 이름

    I) 전체 경로 (또는 파일 이름)

  2. 일반적으로 (약간의 장황한 점, 집을 운전하기 위해 미안하지만 foo.src) 실제로 파일 이라고 가정 합니다.

    A) NA

    B) 기본 이름

    C) NA

    D) 확장

    E) 디렉토리 또는 단순히 경로

    F) 상대 경로

    G) NA

    H) 디렉토리 또는 단순히 경로

    I) 전체 경로 (또는 파일 이름)

내 편에서 한 가지 예를 들어 더 운전 :

  1. 경로를 고려하십시오 C:\Documents and Settings\All Users\Application Data\s.sql.

    1. C:\Documents and Settings\All Users\Application Data\s.sql 전체 경로입니다 (파일 이름).
    2. C:\Documents and Settings\All Users\Application Data\ 디렉토리 이름입니다.
  2. 이제 경로를 고려하십시오 C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data 전체 경로입니다 (디렉토리가 됨)
    2. C:\Documents and Settings\All Users 디렉토리 이름입니다.

내 두 가지 팁 :

  1. 이 유형의 규칙에 관계없이 전체 주소를 처리 할 때는 거의 항상 "전체 경로"라고합니다. 이렇게하면 파일 경로와 폴더 경로에 두 가지 용어를 사용할 필요가 없으며 파일 이름을 파일 이름으로 지정할 경우 혼동을 피할 수 있습니다 (대부분의 사용자는 즉시 기본 이름으로 변환). 그러나 경로 유형에 대해 구체적이어야하는 경우보다 일반적인 "경로"대신 파일 이름 또는 디렉토리의 이름을 지정하는 것이 좋습니다.

  2. 그것이 무엇이든 당신은 당신의 자신의 생각을 염두에두고 그것을 통해 일관성을 유지하십시오. 팀 구성원간에 이것이 합의가 아니라는 것을 합의하십시오.

이제 원에서 연습이 있습니다. 새로운 용어 브랜드는 OS X 및 Android 시스템에서 사용됩니다. 그리고 이것들은 모두 파일 시스템의 물리적 경로에 관한 것입니다. 웹 주소의 경우 완전히 새로운 용어집이 생깁니다. 나는 누군가 가이 같은 스레드에서 빈 공간을 채울 것으로 기대합니다 :) 나는 당신이 진행 한 협약을 듣고 기쁠 것입니다.


오랫동안 "pathname"이라는 단어를 사용하여 전체 파일 이름을 포함한 전체 절대 경로를 의미했습니다. 귀하의 답변, 다른 사람 및 다른 곳의 리소스가 그것에 대해 마음을 바꿨습니다. 이제 파일 이름이없는 위치는 "전체 경로", 파일 이름이없는 위치는 "경로", 파일 이름은 "파일 이름"또는 "이름" 그 자체.
Nate

24

C ++에서 Boost.Filesystem 은 경로의 다양한 부분에 대한 명명법을 고안했습니다. 자세한 내용 과이 자습서경로 분해 참조 설명서를 참조하십시오 .

다음은 튜토리얼을 기반으로 한 요약입니다. 에 대한:

  • Windows 경로 : c:\foo\bar\baa.txt
  • 유닉스 경로 : /foo/bar/baa.txt

당신은 얻는다 :

Part            Windows          Posix
--------------  ---------------  ---------------
Root name       c:               <empty>
Root directory  \                /
Root path       c:\              /
Relative path   foo\bar\baa.txt  foo/bar/baa.txt
Parent path     c:\foo\bar       /foo/bar
Filename        baa.txt          baa.txt
Stem            baa              baa
Extension       .txt             .txt

C ++ 표준 ISO / IEC 14882 : 2017

또한 Boost.Filesystem 용어는 C ++ 17 => See 에 채택되었습니다.std::filesystem

Function name     Meaning
----------------  -------------------------------
root_name()       Root-name of the path
root_directory()  Root directory of the path
root_path()       Root path of the path
relative_path()   Path relative to the root path
parent_path()     Path of the parent path
filename()        Path without base directory (basename)
stem()            Filename without extension
extension()       Component after last dot

6
그러면 그들은 전체를 무엇이라고 부릅니까? path, fullpath?
wisbucky

@wisbucky 명명법에서 전체를 "경로"라고합니다.
Emile Cormier

1
@wisbucky 링크를 수정했습니다. 감사.
Emile Cormier

@olibre : C ++ 17 업데이트에 감사드립니다. 그러나 경로가 아닌 파일 이름stem() 의 일부입니다 .
Emile Cormier

1
@ johnc.j. 부스트. 파일 시스템은 질문이 처음 제기되었을 때 잘 알려지지 않았습니다. 오히려 스스로 검토하는 것보다 동료 검토 라이브러리의 명명법을 채택하고 싶습니다.
Emile Cormier

9

Python의 pathlib표준 라이브러리에는 경로 구성 요소에 대한 훌륭한 명명 규칙이 있습니다. https://docs.python.org/3/library/pathlib.html

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 (점없이)

[아무것도]

d) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (점 포함)

접미사

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 \ 위젯 \ foo.src

부모님 성함

h) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

부모 경로

i) C : \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

통로


8

아니 당신은 미쳤어.

Windows 시스템 에서 파일을 포함하는 디렉토리경로를 path 라고 하는 경우가 있습니다. 예를 들어

    x:\dir1\dir2\myfile.txt

    Windows:
    --------
        PATH:  x:\dir1\dir2
        FILE:  myfile.txt

    Unix/Linux:
    -----------
        PATH:  /dir1/dir2/myfile.txt
        FILE:  myfile.txt

유닉스 / 리눅스 접근 방식은 훨씬 더 논리적이며, 파일 이름 자체를 포함한 경로가 모두 위에서 언급 한 것입니다. 그러나 "call /?"를 입력하면 Windows 명령 행에서 다음을 얻습니다.

    %~1         - expands %1 removing any surrounding quotes (")
    %~f1        - expands %1 to a fully qualified path name
    %~d1        - expands %1 to a drive letter only
    %~p1        - expands %1 to a path only
    %~n1        - expands %1 to a file name only
    %~x1        - expands %1 to a file extension only

"path only"와 "file name only"가 있습니다. 동시에 전체 문자열을 "정규화 된 경로 이름"이라고하며 드라이브 문자와 경로 및 파일 이름으로 이해됩니다. 따라서 진실은 없습니다. 헛된 것입니다. 배신 당했어

어쨌든,

질문에 대답하기 위해

이것이 내가 당신의 예제 이름을 짓는 방법입니다 :

A: -
B: basename
C: extension
D: -
E: -
F: -
G: -
H: pathname (or dirname or containing path)
I: full name

ADEF에는 간단한 닉네임이 없습니다. 그리고 php는 아마도 가장 널리 알려진 크로스 플랫폼 언어이기 때문에 모두 "basename"과 "dirname"을 이해하므로 그 이름을 고수 할 것입니다. 이름도 분명합니다. 전체 경로는 약간 모호하지만 대부분의 경우 동일한 내용을 의미합니다.


1
오랫동안 "pathname"이라는 단어를 사용하여 전체 파일 이름을 포함한 전체 절대 경로를 의미했습니다. 여기에있는 다른 답변과 다른 리소스가 그것에 대해 마음을 바꿨습니다. 이제 파일 이름이없는 위치는 "전체 경로", 파일 이름이없는 위치는 "경로", 파일 이름 자체는 "파일 이름"또는 "이름"을 사용하겠습니다.
Nate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.