
ファイル名は、ファイルシステム内でコンピュータファイルを一意に識別するために使用されます。ファイルシステムによって、ファイル名の長さに関する制限は異なります。
ファイル名には(ファイルシステムによっては)以下のものが含まれる場合があります。
.txtプレーンテキスト、.pdfPortable Document Format、.dat未指定のバイナリデータなど)。ユーティリティやアプリケーションがファイルを識別するために必要な要素は、オペレーティングシステムによって異なり、有効なファイル名の構文や形式も同様に異なります。
ファイル名に使用できる文字はファイルシステムによって異なります。ほとんどのファイルシステムでは、A~Z の文字と 0~9 の数字が許可されています。多くのファイルシステムでは、a~z の文字、特殊文字、アクセント付き文字、非ローマ字アルファベットの記号、非アルファベットスクリプトの記号などの印刷可能な文字といった追加の文字もサポートしています。一部のファイルシステムでは、ベル、ヌル、リターン、ラインフィードなどの印刷不可能な文字もファイル名の一部として使用できますが、[ 1 ]ほとんどのユーティリティではそれらをうまく処理できません。
ファイル名には、ファイルの改訂番号や世代番号、数値シーケンス番号(DCF規格を通じてデジタルカメラで広く使用されている)、日付と時刻(スマートフォンのカメラソフトウェアやスクリーンショットで広く使用されている)、被写体名や場所名などのコメント、またはファイルを識別するのに役立つその他のテキストなどが含まれる場合があります。
デバイス、サブディレクトリ、ファイル名の完全な指定を指す場合、「ファイル名」という用語を使用する人もいます。例えば、Windows のC:\Program Files\Microsoft Games\Chess\Chess.exeのようにです。この場合のファイル名はChess.exeです。MS Windows エクスプローラーのように、拡張子を非表示にする設定を持つユーティリティもあります。
1970年代には、一部のメインフレームコンピュータやミニコンピュータでは、システム上のファイルがユーザー名またはアカウント番号によって識別されるオペレーティングシステムが採用されていた。
例えば、Digital Equipment CorporationのTOPS-10およびRSTS/Eオペレーティングシステムでは、ファイルは次のように識別されました。
IBMのOS/360および後継オペレーティングシステムでは、ファイル名は最大44文字で、大文字、数字、ピリオドで構成されます。ファイル名は文字または数字で始まり、8文字ごとに少なくとも1回ピリオドが出現し、連続する2つのピリオドは名前に現れず、名前は文字または数字で終わる必要があります。[ 2 ] [ 3 ]慣例として、TSOを使用する場合、最初のピリオドの前の文字と数字は所有者またはそれが属するプロジェクトのアカウント番号ですが、この慣例を使用する必要はありません。[ 4 ]
マギル大学のMUSIC/SPシステムでは、ファイル名は
Univac VS/9オペレーティングシステムのファイル名は、
1985年にRFC 959で、パス名がファイルを識別するためにユーザーがファイルシステムに入力しなければならない文字列であると正式に定義された。 [ 5 ]
CP/Mオペレーティングシステムを使用する初期のパーソナルコンピュータでは、ファイル名は常に 11 文字でした。これは、最大 8 バイトの名前と最大 3 バイトの拡張子を持つ8.3 ファイル名と呼ばれていました。ユーティリティとアプリケーションにより、ユーザーは末尾のスペースなしでファイル名を指定し、拡張子の前にドットを含めることができました。ドットは実際にはディレクトリに保存されませんでした。7 ビット文字のみを使用することで、最上位ビットを使用して実際のファイル名にいくつかのファイル属性を含めることができました。これらの属性には、読み取り専用、アーカイブ、システムなどがありました。 [ 6 ]最終的にこれは制限が厳しすぎたため、許可される文字数が増加しました。属性ビットは、追加情報を含むファイルの特別なブロックに移動されました。
Standalone Disk BASIC-80で使用されていたオリジナルのファイルアロケーションテーブル(FAT)ファイルシステムは、ファイル名が6.3形式で、ファイル名の最大長は6バイト、拡張子の最大長は3バイトでした。IBM PC DOS / MS-DOSおよびWindows 95以前のMicrosoft WindowsのFAT12およびFAT16ファイルシステムは、CP/Mファイルシステムと同じ8.3形式を採用していました。FATファイルシステムは8ビット文字をサポートしていたため、ファイル名にASCII以外の文字を使用することができ、属性はファイル名とは別に格納されていました。
1995年頃、MS-DOSのFATファイルシステムを拡張したVFATがWindows 95とWindows NTに導入されました。これにより、従来の「8.3」形式のファイル名に加えて、Unicode文字を使用した大文字小文字混在の長いファイル名(LFN)が可能になりました。
プログラムやデバイスは、数値カウンター(例IMG_0001.JPG:)や現在の日時を示すタイムスタンプなど、ファイルに自動的に名前を割り当てる場合があります。
タイムスタンプ付きのファイル名の利点は、ファイルマネージャーに通常備わっているファイル名検索機能を利用して、日付によるファイル検索が容易になることです。さらに、異なるデバイス上のファイルをファイル名の競合を起こすことなく、1つのディレクトリに統合できます。
一方、番号付きファイル名の場合、デバイスの内部時計が正しく設定されている必要はありません。例えば、デジタルカメラのユーザーの中には、カメラの時計を設定しない人もいるでしょう。スマートフォンなどのインターネット接続機器は、NTPサーバーから時計を同期する場合があります。
おそらく最も一般的なファイル命名規則は、ディレクトリ名とファイル名をPOSIXポータブルファイル名文字セットの65文字に制限することです。一般的な方法の1つは、ドキュメントの完全な「タイトル」を任意のUTF-8文字でファイル自体に格納し、そのタイトルからファイル名として使用する「スラッグ」を自動的に生成することです。
絶対参照は、すべてのディレクトリ階層を含みます。システムによっては、完全なディレクトリパスを含まないファイル名参照は、現在の作業ディレクトリをデフォルトとして指定します。これは相対参照です。プログラム構成ファイルやスクリプトで相対参照を使用する利点の1つは、スクリプトまたはプログラムの異なるインスタンスが異なるファイルを使用できることです。
これにより、ファイル名のシーケンスで構成される絶対パスまたは相対パスが作成されます。
Unix ライクなファイルシステムでは、1 つのファイルに複数の名前を付けることができます。従来の Unix スタイルのファイルシステムでは、名前はファイルのinodeまたはそれに相当するものへのハード リンクです。Windows はNTFSファイルシステムでハード リンクをサポートしており、Windows XP以降ではハード リンクを作成するためのコマンドを提供しています。[ 7 ] [ 8 ]ハード リンクは、Windows のショートカット、従来の Mac OS/macOS のエイリアス、またはシンボリック リンクとは異なります。VFATでLFNが導入されたことで、ファイル名エイリアスが可能になりました。たとえば、最大 8 文字プラス 3 文字で、古いプログラムの 8.3 の制限に準拠する方法として、ファイル名エイリアス " " がありました。fsutilmklinklongfi~1.???long file name.???
このプロパティは、まず2つ目のファイル名を作成し、その後で最初のファイル名のみを削除する移動コマンドアルゴリズムで使用されていました。
他のファイルシステムは、設計上、ファイルごとに1つのファイル名しか提供しないため、あるファイル名のファイルを変更しても、他のファイル名のファイルは変更されないことが保証されます。
ファイルシステムによっては、ファイル名の長さに制限があります。IBM z/OSの 44 文字のように、ファイル名全体に対して長さが制限される場合もあります。[ 3 ]また、ディレクトリ内のファイル名やディレクトリ名など、ファイル名の特定の部分に長さ制限が適用される場合もあります。例えば、9 文字 ( Standalone Disk BASICの8 ビット FATなど)、11 文字 ( DOS のFAT12、FAT16、FAT32など)、14 文字 (初期の Unix など)、21 文字 ( Human68Kなど)、31 文字、30 文字 ( Apple DOS 3.2 および 3.3 など)、15 文字 ( Apple ProDOSなど)、44 文字 (IBM S/370 など)、[ 3 ]または 255 文字 (初期の Berkeley Unix など) バイトです。長さ制限は、ファイルシステム内で名前の構成要素を格納するために固定領域を割り当てることによって生じることが多いため、制限を引き上げると、多くの場合、互換性のない変更が必要となり、さらに領域を確保する必要も生じる。
ネストされたディレクトリに情報を格納するファイルシステムの特有の問題は、長さチェックが名前全体ではなく個々の部分にのみ適用される可能性があるため、実装制限を超える完全なパス名を持つファイルを作成できる可能性があることです。多くの Windows アプリケーションはMAX_PATH260 という値に制限されていますが、Windows ファイル名は簡単にこの制限を超える可能性があります。[ 9 ] Windows 10 バージョン 1607以降、MAX_PATH の制限は削除されました。[ 10 ]
FATやFiles-11のODS-1およびODS-2レベルなど、一部のファイルシステムでは、ファイル名は2つの部分で構成されます。ベース名またはステムと、一部のアプリケーションがファイルの種類を示すために使用する拡張子またはサフィックスです。Unixファイルシステム、VFAT、NTFSなどの他のファイルシステムでは、ファイル名は単一の文字列として扱われます。これらのファイルシステムでよく使われる慣習として、ファイル名にピリオドが含まれている場合、最後のピリオドに続く文字をファイル名の拡張子部分として扱います。
アプリケーションによって作成される複数の出力ファイルは、同じベース名とさまざまな拡張子を使用する場合があります。たとえば、Fortran コンパイラは、FORソース入力ファイルには拡張子、OBJオブジェクト出力には拡張子、LSTリストには拡張子を使用する場合があります。一般的な拡張子はいくつかありますが、それらは任意であり、別のアプリケーションではRELや を使用する場合RPTがあります。拡張子は、少なくとも歴史的には一部のシステムでは 3 文字の長さに制限されていましたが、一般的には任意の長さにすることができます。たとえば、 などですhtml。
ファイル名には一般的なエンコード規格はありません。
ネットワークファイル転送、ファイルシステムストレージ、バックアップおよびファイル同期ソフトウェア、構成管理、データ圧縮およびアーカイブなど、ソフトウェア環境間でファイル名を交換する必要があります。そのため、アプリケーション間でファイル名情報が失われないことが非常に重要です。こうした理由から、ファイル名のエンコード標準としてUnicodeが広く採用されましたが、既存のソフトウェアはUnicodeに対応していない場合があります。
従来、ファイル名にはファイルシステムで安全であればどんな文字でも使用できました。[ 11 ]これにより、あらゆるエンコーディングの使用が可能になり、あらゆるローカルシステム上であらゆるローカルテキストを表現できるようになりましたが、多くの相互運用性の問題を引き起こしました。
ファイル名は、同一国内の異なるシステムで異なるバイト列を使用して保存される可能性があり、例えば、一方が日本語のShift JISエンコーディングを使用し、もう一方が日本語のEUCエンコーディングを使用する場合などである。ほとんどのシステムは、ファイル名に使用されているエンコーディングの説明を拡張ファイル情報の一部として公開していなかったため、変換は不可能であった。このため、ファイルにアクセスするたびに、コストのかかるファイル名エンコーディングの推測を強いられた。[ 11 ]
解決策の一つとして、ファイル名のエンコード方式としてUnicodeを採用することが挙げられた。
しかし、従来の Mac OS では、ファイル名のエンコードはファイル名属性とともに保存されていました。[ 11 ]
Unicode規格は、エンコーディングの決定に関する問題を解決する。
とはいえ、正規化(等価性)や使用されている Unicode バージョンなど、相互運用性に関する限定的な問題がいくつか残っています。たとえば、UDF は Unicode 2.0 に限定されています。macOS のHFS+ファイルシステムはNFD Unicode 正規化を適用し、オプションで大文字小文字を区別します(デフォルトでは区別しません)。ファイル名の最大長は標準ではなく、コード ユニットのサイズによって異なる場合があります。これは深刻な問題ではありますが、ほとんどの場合、限定的な問題です。[ 11 ]
Linuxでは、ファイル名だけではファイルを開くのに不十分です。さらに、ストレージデバイス上のファイル名の正確なバイト表現が必要になります。これは、アプリケーションレベルでいくつかの巧妙な正規化呼び出しによって解決できます。[ 12 ]
Unicode の等価性の問題は「正規化名衝突」として知られています。解決策の一つとして、Subversion および Apache の技術コミュニティで使用されている非正規化 Unicode 構成認識があります。 [ 13 ]この解決策では、リポジトリ内のパスは正規化されません。パスは比較のためにのみ正規化されます。しかしながら、一部のコミュニティはこの戦略を特許化し、他のコミュニティによる使用を禁止しています。
相互運用性の問題を軽減するために、Sun社が提案したアイデアには以下のようなものがある。
これらの考慮事項により、UTF-8以外の将来のエンコーディングへの切り替えを許容しないという制約が生じる。
課題の一つはUnicodeへの移行でした。この目的のために、いくつかのソフトウェア会社がファイル名を新しいUnicodeエンコーディングに移行するためのソフトウェアを提供しました。
Mac OS X 10.3では、AppleがUnicode 3.2文字分解を採用し、それまで使用されていたUnicode 2.1分解に取って代わりました。この変更により、Mac OS X向けソフトウェアを開発する開発者に問題が発生しました。[ 16 ]
同一ディレクトリ内では、ファイル名は一意でなければなりません。ファイル名の構文はディレクトリにも適用されるため、同一ディレクトリ内に同じ名前のファイルとディレクトリを作成することはできません。異なるディレクトリ内の複数のファイルは、同じ名前を持つことができます。
一意性アプローチは、大文字小文字の区別と、 NFC、NFDなどのUnicode正規化形式の両方で異なる場合があります。これは、同じテキストファイル名で、ファイル名のバイト実装が異なる2つの別々のファイルが作成される可能性があります。たとえば、L"\x00C0.txt" (UTF-16、NFC) (ラテン大文字A、グレイブ付き) と L"\x0041\x0300.txt" (UTF-16、NFD) (ラテン大文字A、グレイブ結合) などです。[ 17 ]
VFAT導入以前のFATなどの一部のファイルシステムでは、ファイル名の作成時に使用された文字の大文字・小文字に関係なく、ファイル名を大文字で保存します。たとえば、「MyName.Txt」または「myname.txt」という名前で作成されたファイルは、「MYNAME.TXT」というファイル名で保存されます(VFATは文字の大文字・小文字を保持します)。大文字と小文字のどのような組み合わせでも同じファイルを参照できます。このようなファイルシステムは、大文字・小文字を区別しないファイルシステムと呼ばれ、大文字・小文字を保持するファイルシステムではありません。一部のファイルシステムでは、ファイル名に小文字を使用することを一切禁止しています。
ファイルシステムによっては、ファイル名を元の形式で保存するものがあります。このようなファイルシステムは、大文字小文字を保持するファイルシステムと呼ばれます。このようなファイルシステムは、大文字小文字を区別する場合と区別しない場合があります。大文字小文字を区別する場合、「MyName.Txt」と「myname.txt」は同じディレクトリ内の異なるファイルを指す可能性があり、それぞれのファイルは、ファイル名の正確な大文字小文字の区別で参照する必要があります。一方、大文字小文字を区別しない大文字小文字保持ファイルシステムでは、「MyName.Txt」、「myname.txt」、「Myname.TXT」のうち、特定のディレクトリ内のファイル名として使用できるのは1つだけであり、これらの名前のいずれかを持つファイルは、名前の大文字小文字の区別に関係なく参照できます。
Unix およびその派生システムのファイルシステムは、当初から大文字小文字を区別し、大文字小文字を保持する方式でした。しかし、これらのシステム上のすべてのファイルシステムが大文字小文字を区別するわけではありません。デフォルトでは、macOSのHFS+とAPFS は大文字小文字を区別しませんが、大文字小文字を保持します。また、SMBサーバーは通常、大文字小文字を区別しない動作を提供します (基盤となるファイルシステムが大文字小文字を区別する場合でも、たとえばほとんどの Unix ライクなシステムのSambaなど)。さらに、SMB クライアントのファイルシステムも大文字小文字を区別しない動作を提供します。ファイルシステムの大文字小文字の区別は、Samba やWineなどのソフトウェアにとって大きな課題です。これらのソフトウェアは、大文字と小文字のファイルを別々に扱うシステムと、それらを同じものとして扱うシステムの両方と効率的に相互運用する必要があります。[ 18 ]
ファイルシステムは、ファイル名を構成するための文字セットを常に統一してきたわけではありません。Unicodeが事実上の標準となる以前は、ファイルシステムは主にロケールに依存する文字セットを使用していました。これに対し、最近のシステムでは、ファイル名をUnicodeのほぼすべての文字、さらには一部の非Unicodeバイトシーケンスで構成できるものもあります。ただし、ファイルシステム、オペレーティングシステム、アプリケーション、または他のシステムとの相互運用性の要件によって制限が生じる場合があります。
多くのファイルシステムユーティリティは、ファイル名に制御文字が含まれることを禁止しています。Unix ライクなファイルシステムでは、ヌル文字[ 19 ]とパス区切り文字/は禁止されています。
ファイルシステムユーティリティや各種システムの命名規則では、特定の文字がファイル名に現れることを禁止したり、問題を引き起こしたりする場合があります。[ 9 ] 特に明記されていない限り、文字列の記号「"」や「<」などは、Windows のファイル名には使用できません。
注1:Unixのファイル名やディレクトリ名では使用できますが、ほとんどのUnixシェルでは、スペース、<、>、|、\、場合によっては :、(、)、&、 ;、#などの特定の文字、および ?や*などのワイルドカードは、引用符で囲むかエスケープする必要があります。
five\ and\ six\<seven(エスケープの例)'five and six<seven'または"five and six<seven"(引用の例)
文字å (U+00E5) は、 86-DOSおよび MS-DOS/PC DOS 1.x-2.xではファイル名の最初の文字として使用できませんでしたが、それ以降のバージョンでは使用できます。
Windowsユーティリティでは、ファイル名の末尾にスペースやピリオドを使用することはできません。[ 20 ]ピリオドは先頭文字として使用できますが、Windowsエクスプローラーなどの一部のWindowsアプリケーションでは、このようなファイルの作成や名前変更が禁止されています(この慣習はUnix系システムで隠しファイルやディレクトリを表すために使用されています)。回避策としては、ファイル名を変更する際にドットを追加する(その後自動的に削除されます)、別のファイルマネージャを使用する、コマンドラインを使用してファイルを作成する、またはアプリケーション内から目的のファイル名でファイルを保存するなどがあります。[ 21 ]
特定のオペレーティングシステム上のファイルシステム(特に、元々他のオペレーティングシステムで実装されたファイルシステム)や、そのオペレーティングシステム上の特定のアプリケーションによっては、さらに制限や解釈が適用される場合があります。制限の詳細については、「ファイルシステムの比較」を参照してください。
Unix ライクなシステム、DOS、および Windows では、ファイル名 "." と ".." には特別な意味があります (それぞれ現在のディレクトリと親ディレクトリ)。Windows 95/98/MEでは、"...", "...." などの名前を使用して、祖父母または曾祖父母のディレクトリを示します。[ 22 ]すべての Windows バージョンでは、ドットのみで構成されるファイル名の作成は禁止されていますが、Unix では 3 つのドット ("...") 以上で構成される名前は有効です。
さらに、Windows および DOS ユーティリティでは、一部の単語は予約されており、ファイル名として使用できません。[ 21 ]例えば、DOSデバイス ファイル: [ 23 ]
CON、CONIN$、CONOUT$、PRN、AUX、CLOCK$、NUL COM0、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9 [ 9 ] LPT0、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9 [ 9 ] LST ( 86-DOSおよび DOS 1.xx のみ)KEYBD$、SCREEN$(マルチタスク対応のMS-DOS 4.0 のみ) $IDLE$(Concurrent DOS 386、Multiuser DOS、およびDR DOS 5.0以降でのみ使用可能) CONFIG$(MS-DOS 7.0~8.0のみ)
これらの制限があるシステムは、他のファイルシステムとの互換性の問題を引き起こします。たとえば、Windows は、aux.c、[ 24 ] q"uote"s.txt、または NUL.txt といった有効な UNIX ファイル名を処理できなかったり、エラー レポートを生成したりします。
内部的に使用されるNTFSファイル名には以下が含まれます。
$Mft、$MftMirr、$LogFile、$Volume、$AttrDef、$Bitmap、$Boot、$BadClus、$Secure、 $Upcase、$Extend、$Quota、$ObjId、$Reparse
以下の表は、様々な主要なファイルシステムで実装されているファイル名の一般的な属性について説明しています。
:では が として/、の代わりにが禁止されているようです。:/