web-dev-qa-db-ja.com

ファイル名?パス名?ベース名?パスの断片の命名標準

パスとファイル名を操作しているときは、使用している一般的な命名システムがないため、ノットのままです。

私は命名基準を考え出し、それに固執する必要があります。そして、他の人と明確で一貫したものになりたいので、標準的な答えを学ぶために開放しています。

このおもちゃの問題を考えてみてください:(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固有の用語ではありませんか?

197
Oddthinking

「標準の」命名規則の検索は無駄になると思います。以下は、既存の有名なプログラムに基づいた私の提案です。

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

Vimはそれを呼び出しますfile root(: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

木のてっぺん
慣習はありません。gitはそれを呼び出しますbase directory

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

ツリーの最上部から葉までのパス
相対パス

G)C:\ users\OddThinking\Documents\My Source \ウィジェット\ foo.src

ツリーの1つのノード
慣習はなく、おそらく単純なディレクトリ

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

ディレクトリ名

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

フル/絶対パス

146
blinry

まず第一に、良い質問です。 Utilityクラスで一度に多数の関数を作成しなければならなかったとき、このことは私を悩ませました。 GetFileName?またはGetFullName? GetApplicationPathはフルパスまたはディレクトリ名を意味しますか?等々。私は.NETのバックグラウンドから来ているので、@ blinryによる優れた答えにさらに少し追加できると思います。

概要:(イタリック体はプログラマとして使用しないものです)

  1. Path:Pathは、ファイルシステム内の一意の場所を指定します(相対パスを除く)。パス名はあまり使用されませんが、私はパスに固執します-それはそれが何であるかをほとんど説明しています。パスは、ファイルまたはフォルダーを指すことも、何もないこともあります(C:\)。パスは次のとおりです。

    1. 相対パス:_My Source\Widget\_は、_Widget\foo.src_と同様に相対パスです。自明。
    2. 絶対パスまたはフルパス:ターゲットを指す完全修飾パスです。私は後者をより頻繁に使用する傾向があります。したがって、_C:\users\OddThinking\Documents\My Source\Widget\foo.src_はフルパスです。最後に、ファイルを指し、ディレクトリとして終わるフルパスと呼ぶものを見てください。

    wikiページpathの.NET命名は一貫しています。

  2. Root PathまたはRoot Directory:以前は。 UNIX界で聞いた。私は両方とも好きですが、前者をもっと使う傾向があります。 Windowsでは、UNIXとは異なり、パーティションごとに1つずつ、多くの異なるルートパスがあります。 Unixシステムには、他のディレクトリとファイルに関する情報を保持する1つのルートディレクトリがあります。例えば。 _C:\_はルートパスです。

  3. フォルダーまたはフォルダー名WidgetOddThinkingなどこれはWindowsのみの慣習かもしれません(実際、私自身の奇妙な考え方:))、それにもかかわらず、私はblinryの答え「ディレクトリ」に強く反対しています。通常のユーザーディレクトリの場合、フォルダと同じ same (サブフォルダ、サブディレクトリなど)を意味しますが、技術的な角度からは、「ディレクトリ」はターゲットへの修飾アドレスではなく、ターゲット自体。詳細は以下。

    1. サブフォルダーusersに関しては、OddThinkingDocumentsはサブフォルダーです。
    2. サブディレクトリusers _OddThinking\_に関して、_OddThinking\Documents\_および_OddThinking\Documents\My Source\Widget\_はサブディレクトリです。しかし、私たちはしばしばそれについて気にする必要はありませんか?
    3. 子フォルダーusers _ OddThinkingに関しては、子フォルダー(およびサブフォルダー)
    4. 親フォルダOddThinkingusersの場合は親フォルダです(異なる用語に言及するだけで大​​したことはありません)。
  4. ディレクトリまたはディレクトリ名:前者は実際に一般的に使用し、後者はコードに使用します。これは、ターゲットの親フォルダーまでの完全修飾パス(または単にフルパス)を指します。あなたの場合、_C:\users\OddThinking\Documents\My Source\Widget_(はい、ディレクトリがファイルを指すことは決してありません)。ディレクトリは.NETのクラスであり、ディレクトリ名はライブラリ自体が呼び出すものなので、コードではディレクトリ名を使用します。 UNIXシステムで使用される dirname と非常に一貫しています。

  5. ファイル名またはBasename:ファイル名と拡張子。あなたの場合:_foo.src_。私は技術以外の用途にはファイル名(それはエンドユーザーにとって何を意味するか)を好むと言いますが、技術的な目的には厳密に固執しますベース名。ファイル名はMSでよく使用されますが、ドキュメントだけでなくライブラリでも一貫していないことに驚いています。ファイル名は、ファイルのベース名またはフルパスのいずれかを意味します。だから私はベースネームを好む、それは私がコードでそれらを呼ぶものです。 このページ wikiでも、ファイル名はフルパスまたはベース名のいずれかを意味する可能性があると述べています。驚いたことに、.NETでも、ファイルのルート名を意味する使用ベース名を見つけることができます。

  6. ExtensionまたはFilename ExtensionまたはFile Extension:私は最後のものが好きです。すべてが同じことを指しますが、それはまた議論の問題です! Wikisrcであると言いますが、当時は多くの言語が_.src_として解釈していることを読んだことを覚えています。ドットに注意してください。だから、私のテイクは、カジュアルな使用のためにそれが何であるかは関係ありませんが、プログラマーとして私は常に拡張を_.src_と見ています。

    OK私はいくつかの標準的な用法を取得しようとしたかもしれませんが、ここに私が従う2つの慣習があります。そして、それはフルパスについてです。

    1. 通常、ファイルを指すフルパスをfile pathとして呼び出します。私にとってファイルパスは明確で、それが何であるかを教えてくれます。ファイル名ではファイルの名前として見つけますが、コードではfile 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\_です。その明確を願っています。

    最後の2つの用語を心配しない方がいいと思います(個人的に私にとって) フルパスという用語を使用してください!

あなたに答えるには:

  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つの例によるさらなる運転:

  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_はディレクトリ名です。

私の2つのヒント:

  1. 私はこの経験則に従って、そのタイプに関係なく完全なアドレスをアドレス指定する場合、ほとんど常に「フルパス」と呼びます。これにより、ファイルパスとフォルダーパスの2つの用語の使用が排除されるだけでなく、ファイルの名前をファイル名として指定する場合の混乱を避けることができます(ほとんどのユーザーにとっては、すぐにベース名に変換されます)。しかし、もしあなたがパスのタイプについて特定しなければならないなら、より一般的な「パス」の代わりにファイル名やディレクトリよりも名前を付ける方が良いです。

  2. それが何であれ、あなたは自分の考えを念頭に置いて、全体を通してそれと一致しているでしょう。これはこれではなく、それを意味するというチームメンバーのコンセンサスを持っています。

さて、サークルからの練習があります。新しいブランド用語は、OS XおよびAndroidマシンで使用されます。これらはすべて、ファイルシステムの物理パスに関するものです。Webアドレスの場合は、まったく新しい用語のセットが発生します誰かがこの同じスレッドの空白を埋めることを期待しています:)あなたが進めてきた慣習を聞いてうれしいです。

33
nawfal

C++では、 Boost.Filesystem はパスのさまざまな部分の命名法を考案しました。詳細については パス分解 のリファレンスドキュメントと、この チュートリアル を参照してください。

チュートリアルに基づいた概要を以下に示します。ために:

  • Windowsパス:c:\foo\bar\baa.txt
  • Unixパス:/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 =>で採用されています 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
23
Emile Cormier

いいえ、あなたはクレイジーではありません。

Windowsシステムでは、ファイルを含むディレクトリのパスパスと呼ばれることがあります。たとえば、

    x:\dir1\dir2\myfile.txt

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

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

Unix/Linuxのアプローチははるかに論理的であり、それは誰もが上記で言及したことです:ファイル名自体を含むパス。ただし、「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

そのため、「パスのみ」と「ファイル名のみ」があります。同時に、文字列全体を「完全修飾パス名」と呼びます。これは、ドライブ文字とパスとファイル名として理解されます。だから本当の真実はありません。無駄だ。あなたは裏切られました。

とにかく、

あなたの質問に答えるために

これは私があなたの例を命名する方法です:

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

A-D-E-Fには単純なニックネームはありません。 phpはおそらく最も広く知られているクロスプラットフォーム言語であるため、誰もが「ベース名」と「ディレクトリ名」を理解しているので、その命名法に固執します。氏名も明らかです。フルパスは少しあいまいですが、ほとんどの場合、まったく同じことを意味します。

6
dkellner

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

親パス

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

1
Maggyero