40

.htaccess .gitignoreやなどのドット.configファイルにはファイル拡張子があり、ファイル名がありませんか、それともファイル名はあるが拡張子がないと見なされますか?


PHPでいくつかのユーティリティ関数を実装しようとしていますが、これは間違ったことをすることで有名であり、PHPのpathinfo関数はドットファイルをファイル拡張子とファイル名なしpath.extnameと見なしますが、ノードはドットファイルをファイル名と拡張子なしと見なします。

標準が存在するかどうか、またはこれが開発者の好みになるかどうかは不明です。

4

4 に答える 4

20

あなたはお金を払い、次のいずれかを選択します: はい、いいえ、たぶん。

それはあなたの「拡張」の定義に帰着します。

  • 「名前の最後のドットの後の何か」ですか?その場合、それらのファイルには名前がなく、すべて拡張子が付いています。
  • 「名前の最初の文字ではないドットの後の何か」ですか?その場合、それらのファイルには拡張子がありません。
  • 他の定義を使用する場合は、それに応じて答えを調整する必要があります。

SCCS ファイルでは接頭辞が使用されていたことを思い出してくださいs.(とりわけ、p.ファイルも表示されます — 他の接頭辞を持つ一時的なファイル名が多数ありました)。SCCS ファイルs.somethingには拡張子または接頭辞がありますか? (s.source.cの場合、かなり単純です。接頭辞、名前、および拡張子または接尾辞があります。または、特殊なケースとして接頭辞を無視することができ、名前はs.sourceで、拡張子は.cです。) デフォルトの実行可能ファイル名? はa.outどうですか? のような名前はどうでしょうか..dot。拡張子はありますか? もしそうなら、それは何ですか?

DOS に関する回答はより形式化されていることに注意してください。そこでは、8.3 で名前を強制するために使用されたファイル システム (別の千年ほど前に) が使用され、拡張子は具体的でした。しかし、それは大部分が過ぎ去った時代です (そして、それを見逃している人はほとんどいません)。

Anthony Arnoldpaxdiabloの両方が、 で終わる名前が.tar.gz存在することを指摘しました — そのようなファイルの拡張子は何ですか?

の拡張子をsomecode-8.76.tar.gz以外のものとして扱う.gzと、バグオワームにさらされます。含まれるファイルは次のとおりですsomecode-8.76.tar。それ自体は、 の拡張子を持つと合理的に言えます.tar。gzip 圧縮された tar ファイル全体の拡張子を として定義すると、.tar.gz「なぜそうではないのか」という疑問が.76.tar.gz生じます。また、SCCS ファイルの命名規則を再検討する必要があることも意味します。.76名前の一部を.76.tar.gzまたは接尾辞として吸収する.76.tarと、生活が複雑になります。それは有効な質問ですが、「拡張子は名前の最後のドットから末尾までの文字列です」以外のものは実際にいっぱいです-または拡張子の意味の解釈が必要です。

O/S またはファイル システム レベルの Unix は、ファイルの拡張子を気にしないことに注意してください。プログラムは拡張機能を気にするかどうかを決めることができますが、それはプログラム次第です。拡張子はファイルの種類を示します。それは決定的なものではありません。そのfileため、ファイルの内容を識別するプログラムが存在します。ファイルの内容を調べて内容を識別します。ファイル拡張子には注意を払いません (したがって、拡張子が何であるかを決定する必要もありません)。

于 2015-08-24T03:07:19.223 に答える
7

誰かがファイルの拡張子を知りたいと思う理由は、ファイルのタイプ (またはその他のメタデータ) を知りたいからですよね?

ドットファイルの名前は、そのタイプとは関係ありません。ドットファイルの最初のドットの後の部分はその名前であり、拡張子はありません。ただし、ドットファイルには拡張子を付けることもできます (たとえば.mongorc.js、UNIX システムのその他の隠しファイル)。

つまり、ノードのやり方path.extname正しい方法です。

最後の '.' から、パスの拡張子を返します。パスの最後の部分の文字列の最後まで。「.」がない場合 パスの最後の部分または最初の文字が「.」の場合、空の文字列を返します。


ここには 2 つの異なる点があります。

  • 一方では、ファイル名拡張子によっていくつかのメタデータを決定するメカニズムがあります。たとえば、非 UNIX ライクなシステムで「デフォルト」アプリケーションで開く場合などです。

  • 一方、ドットファイルは、Unix ライクなシステムlsから来る 単なる隠しファイルです (通常の名前と に見えないようにするために先頭にドットが付いています)。gitignoreという名前で隠しファイルとしてマークされたファイルも同様です。ここには拡張子はありません。.gitignore

于 2015-08-24T03:27:26.737 に答える