ファイル名?パス名?ベース名?パスの一部の命名基準


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.パスと呼んだものです。待って、それは私がHと呼んだものです。たぶんHはフォルダ名であるべきです。「フォルダ」はWindows固有の用語ではありませんか?


MicrosoftのテクニカルエディターであるMike Popeはブログで、Microsoftスタイルガイドは一貫して2つの単語(ファイル名、フォルダー名、ボリューム名)に固執していますが、Appleスタイルガイドはファイル名、パス名、ボリューム名を結合していることを指摘しています。 。
奇妙なことに、

A)basenameはパスの最後の項目を意味するために多くの場所ですでに使用されているため、絶対にbasenameと呼ばれるべきではありません(ファイルの場合、dirpathのないファイル名になります)。場所によっては、拡張子なしのファイル名をと呼びますstem
wisbucky 2016年

また、複数のピリオドを含むファイル(例: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

ツリーの一番上
慣例はありません、gitはベースディレクトリと呼んでいます

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

ツリーの上部から葉の
相対パスへのパス

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

ツリーの1つのノードに
規則がない、おそらく単純なディレクトリ

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"。)
2010

1
こんにちは、素晴らしい例です。強制的に上にスクロールする参照を使用する代わりに、質問の横に回答を置くと、読みやすくなります。ちなみにそれを改善するために編集しています。Grettings
ビクター

3
ビクター、あなたの編集が拒否されたので(wtfの皆さん、これは非常に良い改善です!)私は自分でやっただけです:-)
blinry

1
1.(拡張子なしのファイル名のみ)、私は一緒に行くことにしましたFile Titleずっと前に起因する明確な規則または少なくともグローバルなコンセンサスの欠如に。
polyvertex

1
A(拡張子なしのファイル名)、あなたが使用することができますstem。参考文献: doc.rust-lang.org/std/path/struct.Path.html#method.file_stemllvm.org/docs/doxygen/html/...boost.org/doc/libs/1_60_0/libs/filesystem/ doc /…
wisbucky 2016年

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したがって、フルパスです。最後に、ファイルを指し、ディレクトリとして終わるフルパスを何と呼びますか。

    Wikiページ用と.NET命名パスが一致しています。

  2. ルートパスまたはルートディレクトリ:以前は.NETの慣例ですが、後者はUNIXのサークルでよく耳にします。私はどちらも好きですが、前者を使う傾向があります。Windowsでは、UNIXとは異なり、各パーティションに1つずつ、多くの異なるルートパスがあります。Unixシステムには、他のディレクトリやファイルに関する情報を保持する1つのルートディレクトリがあります。例えば。C:\ルートパスです。

  3. フォルダまたはフォルダ名WidgetOddThinkingなどあなたのケースで。これはWindowsのみの規則である可能性があります(実際には、独自の奇妙な考え方です:))。通常のユーザーディレクトリの場合、ディレクトリはサブフォルダ、サブディレクトリなどのフォルダと同じ意味です、技術的な観点からは、「ディレクトリ」はターゲット自体ではなく、ターゲットへの修飾アドレスのように聞こえるはずです。詳細は以下。

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

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

  6. 拡張子またはファイル名拡張子またはファイル拡張子:最後のものが好きです。すべて同じものを指しますが、それは何が再び議論の問題です!Wikiによるとsrc、多くの言語がそれをと解釈していることを覚えてい.srcます。ドットに注意してください。繰り返しになりますが、私の見解は、カジュアルな用途ではそれが何であるかは問題ではありませんが、プログラマーとして私は常に拡張をと見なしてい.srcます。

    わかりました、いくつかの標準的な使用法をフェッチしようとしたかもしれませんが、私が従う2つの規則があります。そして、それはフルパスについてです。

    1. 通常、ファイルを指すフルパスをファイルパスと呼びます。私にとってファイルパスは明確で、それが何であるかを教えてくれます。ファイル名をファイル名として見つけましたが、コードではファイル名と呼んでいます。「ディレクトリ名」とも一致します。技術面では、名前は完全修飾名を指します!イライラして.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)フォルダー(basenameの親フォルダー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アドレスの場合、まったく新しい用語集が発生します。私は誰かがこの同じスレッドで空白を埋めることを期待します:)私はあなたが進んだコンベンションを聞いてうれしいです。


長い間、「パス名」という言葉を使用して、完全なファイル名を含む絶対パス全体を意味してきました。あなたの答え、ここにある他の人、そして他の場所にあるリソースはそれについて私の考えを変えました、そして今、私はこれに「フルパス」、ファイル名のない場所に「パス」、ファイル名に「ファイル名」または「名前」という単語を使用します自体。
ネイト

24

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

6
それで彼らは全部を何と呼びますか?pathfullpath
wisbucky 2016年

@wisbucky用語全体では「パス」と呼ばれます。
Emile Cormier

1
@wisbuckyリンクを修正しました。ありがとう。
Emile Cormier 2016年

@olibre:C ++ 17アップデートをありがとう。しかし、パスではなくファイル名のstem()一部です。
エミールコルミエ2017年

1
@ johnc.j。Boost.Filesystemは、最初に質問されたときほど知られていませんでした。私は自分で何かを作るのではなく、査読済みライブラリの命名法を採用したいと思います。
エミールコルミエ2018

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 \ Widget \ 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

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

ADEFには単純なニックネームはありません。また、phpはおそらく最も広く知られているクロスプラットフォーム言語であるため、誰もが「basename」と「dirname」を理解しているので、私はその名前を使用します。フルネームも明らかです。フルパスは少しあいまいですが、ほとんどの場合それはまったく同じことを意味します。


1
長い間、「パス名」という言葉を使用して、完全なファイル名を含む絶対パス全体を意味してきました。ここでの他の回答と他のリソースはそれについて私の考えを変えました、そして今私はこれに「フルパス」という言葉を使用します、「パス」はファイル名のない場所に、そして「ファイル名」または「名前」はファイル名自体に使用します
ネイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.