ファイル名にスペース文字を使用しない技術的な理由は何ですか?

ファイル名にスペース文字を使用しない技術的な理由は何ですか?

私の知り合いの一人が今日、ファイル名にスペースを使用しない傾向にある人々について苛立ちを表明しました。たとえばNamingThingsLikeThis.txt、最近のほとんどのオペレーティング システムはファイル名にスペースをサポートしているにもかかわらずです。

ある技術的な理由ファイル名に(適切な)スペースが含まれていないのがまだ一般的ですか?もしそうなら、ファイル名にスペースが含まれていないことが避けられたり推奨されなかったりする技術的な理由は何ですか?また、どのような状況でそれが関係するのでしょうか?

私が考えられる最も明白な理由、そして私が通常それを避ける理由は、そのようなファイルを扱うときにコマンド ラインで追加の引用符が必要になることです。他に重要な技術的な理由はありますか?

答え1

ファイル名の空白文字は、コマンドラインやスクリプトの多くのコンテキストで、まさに大変な悩みの種となる可能性があります。実行中のコマンドの区切り文字のように見えないように、空白文字が適切にエスケープされていることを確認する必要があります。

ファイル/ディレクトリ/その他がそのようなコンテキストで使用されることは決してないと確信している場合でも、そこにそれらを置かない方が安全です。

それと、古い習慣はなかなか抜けません。

答え2

コマンドラインや古い習慣に関する他の回答に加えて、スペースを含むファイル名を扱うときに特別な注意を必要とするネットワーク プロトコルも多数あります。

(Web サイトから「Product List.pdf」をダウンロードしようとして、「Product」というだけのファイルができてしまったことがあるなら、相手側のプログラマーが http Content-Disposition ヘッダーの引用規則を知らなかったか、理解できなかったために、この問題に悩まされたことになります。)

答え3

理由の多くは歴史的なものです。だからといって、それが今日では意味をなさないというわけではありません。

移植性の問題

ファイルに名前を付ける場合、他の (ファイル) システムがそのファイル名をどのように扱うかを考慮する必要もあります。ファイル名の文字は、使用しているシステムでは問題ないかもしれませんが、別のシステムでは問題になる場合があります。

したがって、古いシステムから簡単にファイルにアクセスできるようにする可能性が少しでもある場合は、安全キャラクター。これには、保管していた古い回復システムを起動したり、最近の Windows バージョンが何らかの形でまだ MS-DOS に基づいているのではないかという不安が含まれる場合があります。

長さ

ファイルシステムによっては、ファイルの長さが制限されることがあります。これは、MS-DOSが制限されていた時代にはさらに深刻でした。8.3 ファイル名したがって、スペースを省くことで、より意味のある文字を名前に含めることができるようになります。

他のファイルシステムでもファイル名の長さに厳しい制限が設けられています。Wikipediaには、ファイルシステムの比較に関する記事詳細を知りたい人向け。

予約文字

MS-DOSでは、スペース文字も予約文字として定義されています。これは、スペース文字がFATのパディングさらに、MS-DOS ではシェル内にエスケープ システムが用意されていませんでした。

コマンドライン解釈

私が知っているほとんどのコマンドラインはパラメータ区切り文字としてのスペース文字ファイル名を適切にエスケープしないと、ファイル名の一部が呼び出したいアプリケーションのパラメータとして解釈される可能性があるため、悲惨な結果を招く可能性があります。

違いを考えてみましょう

rm foo bar

そして

rm "foo bar"

上記のリンク先の WikiPedia の記事では、コマンドを適切にエスケープしないことで生じる曖昧さについても指摘しています。

曖昧さは、ファイル名やディレクトリ名に埋め込まれたスペースを最初から禁止する(たとえば、アンダースコア '_' に置き換える)か、コマンドラインインタープリタとこれらのパラメータを引数として受け取るプログラムでサポートされている場合は、埋め込まれたスペースを含む名前を引用符で囲むか、スペースの前にエスケープ文字(通常はバックスラッシュ ('\'))を使用することで防止できます。たとえば、

Long path/Long program name Parameter one Parameter two ...

曖昧です(「プログラム名」はプログラム名の一部ですか、それとも2つのパラメータですか?); ただし

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

および Long\ パス/Long\ プログラム\ 名前 パラメーター\ 1 パラメーター\ 2 ...

曖昧ではありません。

ユニフォーム リソース ロケータ (URL)

URL を使用してファイルの場所を記述する場合は、スペースをエスケープする必要があります。

文字が安全でない理由はいくつかあります。スペース文字が安全でない理由は、URL が転記またはタイプセットされたり、ワードプロセッサ プログラムで処理されたりするときに、重要なスペースが消えたり、重要でないスペースが導入されたりする可能性があるためです。

ソース:RFC1738

したがって、スペースを に置き換える必要があります%20。これにより、URL のファイル名部分が読みにくくなり、人々はまずそれを避けるようになります。

答え4

場合によっては、コマンドラインで処理する場合、古い OS を使用する場合、異なる OS でコンパイルされるプログラムを作成する場合、または... 問題が発生する理由は多数ありますが、次のようにファイルを記述してもそれほど問題にはならないと思います。空白のないファイル.txtまたは空白のないファイル.txtたとえば下線付きのフォントを扱うときに、アンダースコアが見えなくなることがあるため、私は dask を好みます。

しかし、それは主に古い習慣の問題です。私はそれが十分ではないと感じていますプロ放棄する理由。


追加のメモ。おそらく関係ないかもしれませんが、それでもここに記載します。ファイル名にスペースを入れる人は、通常、そのことをあまり気にしません。そうでない人は、ファイル名にスペースを入れない方がよい理由をあまり理解していません。
そして、私たち全員が同意すると思いますが、ファイル名が「拝啓、yo.doc についてお知らせするためにこの手紙を書いています」であるほど悪いものはありません。

スペースだけではなく、ファイルの長さも考慮されます。私見ですが、ファイルの長さは、たとえば 30 文字を超えてはいけません。スペースが入った長いファイル名は、古い OS で読み取る必要のある CD、DVD などを記録する場合や、Win と *nix プラットフォーム間で読み取る必要がある場合にも便利です。

関連情報