ファイル名(ファイルめい、)は、ファイルシステム上でファイルを特定するために文字列で表された名前。
概要 コンピュータ上で主記憶装置(メインメモリ)にデータとして展開されている作業内容を、補助記憶装置(ストレージ)にファイルとして保存(永続化)するときは、まずファイル名を指定し、その名前を持つファイルを書き込みモードでオープンしてからデータを書き込み、クローズする。一般的には、設定したファイル名は後から何度でも変更(リネーム)可能であるが、システムによってはエンドユーザーによる自由な命名や改名が許可されていない場合もある。ストレージに保存されたファイルの内容をメモリに読み込むときは、そのファイル名を使って読み取りモードでオープンしてからデータを読み取り、クローズする。
文脈によっては、「ファイル名」という用語がファイルの名前だけでなくディレクトリ(フォルダー)の名前(ディレクトリ名、フォルダー名)を包含していることもあるpath::filename - cpprefjp C++日本語リファレンス§File and Directory Names : Naming Files, Paths, and Namespaces - Win32 apps | Microsoft Learn。さらに、「ファイル名」がファイルパスと同一視され、絶対パスまたは相対パスを含んでいることもあればFile input/output - cppreference.comCreateFileW function (fileapi.h) - Win32 apps | Microsoft LearnMoveFileW function (winbase.h) - Win32 apps | Microsoft Learn、パス区切り文字(ディレクトリ区切り文字)で分割された最後の要素のみを表すこともある§Paths : Naming Files, Paths, and Namespaces - Win32 apps | Microsoft Learn。「ファイル名」が拡張子を含むこともあれば、含まないこともある。また、ファイル名の長さや使用可能な文字の制限はオペレーティングシステム (OS) やファイルシステムにより異なる。
ファイル名として解釈される文字列を構成する文字も、OSやファイルシステムにより異なる。Windows NT系では内部的にUnicodeで表される文字からなる文字列(実際のエンコードはUTF-16)を利用しており、NTFSやexFAT、UDFS、FAT32といった比較的新しいファイルシステムではストレージに長いファイル名 (, LFN) をUnicodeで格納する§Short vs. Long Names : Naming Files, Paths, and Namespaces - Win32 apps | Microsoft Learn。。このため、システムによっては人間にとって読めないファイル名を付けることも可能であり、またシステム間でデータを移動する際は適切な規則でのファイル名の変換が必要となる。
パーソナルコンピュータ (PC) 向けのOSでは、エンドユーザーがファイルマネージャーを利用してある程度自由にファイルやディレクトリを操作できるため、ファイル名を意識する機会も多いが、コンピュータシステムやアプリケーションソフトウェアによっては、ユーザーがファイル名を意識する必要がないこともある。例えばゲームの場合、進行状況などを保存するセーブデータは外付けのメモリカード、内蔵のローカルストレージまたはクラウドサーバーなどに何らかのファイルとして保存されるが、通例ソフトウェアによって管理しやすいファイル名が自動的に付けられる。iPhoneやiPadで使われているモバイルOSのiOS/iPadOSは、バージョン10までファイルマネージャーを標準搭載しておらずApple、iOS 11を20日に提供開始 - 「Dock」「ファイル」など追加 | マイナビニュース、エンドユーザーは普段ファイル名どころかファイルという概念の存在すら意識することはなかった。
ファイル名に含まれる要素 ファイル名(パス名)には以下のような要素が含まれる場合がある。 プロトコル(スキームとも)― アクセス方法 例:http, ftp, file, smb など ホスト(ネットワークIDの場合も)― ホスト名、IPアドレス、ドメイン名、LANネットワーク名 例:wikipedia.org, 207.142.131.206, \\MYCOMPUTER, SYS: など デバイス(ノードとも)― ポート、ソケット、ドライブ、ルートマウントポイント、ディスク、ボリューム 例:C:, /, SYSLIB など ディレクトリ(パスとも)― ディレクトリ・ツリー 例:/usr/bin, \TEMP, [USR.LIB.SRC] など ベースファイル名()またはステム()― 拡張子を除いたファイル名path::stem - cpprefjp C++日本語リファレンス 例:C:\hoge\fuga.txtにおける fuga など 種類(や拡張子)― ファイルの内容種別を示す 例:.txt, .exe, .dir, .html など バージョン ― ファイルの版を表す番号
POSIXには、パス区切り文字/で分割された最後の要素を返す「basename」というコマンドおよびシステムコールが存在するbasename — return non-directory portion of a pathname | The Open Group Base Specifications Issue 8 / IEEE Std 1003.1-2024 | The IEEE and The Open Groupbasename — return the last component of a pathname | The Open Group Base Specifications Issue 8 / IEEE Std 1003.1-2024 | The IEEE and The Open Group。これらは拡張子を含むファイル名を返す。コマンドのほうはsuffixオプションを指定することもでき、例えば.txtのような拡張子を取り除く用途にも使えるが、任意の拡張子を一律取り除けるわけではない。
Javaではまたはによって、名前区切り文字で分割された最後の要素を取得することができる。
使用が不可能な記号 たとえ、コンピュータ上で利用可能な記号(例えばテキストファイル内の文字データとして閲覧や編集が可能)でも、ファイル名では使用が不可能な記号がある(「/」「"」のような半角の記号は使用不可能だが、「/」「“」「”」のような全角の記号ならば使用可能な場合もある)。ファイルシステムが違うと、同じOSでも使用不可能な記号が異なることがある。これは、ファイルシステムによって予約されており、その記号が何らかのファイル処理に既に利用されているためである。そのため、あるコンピュータでは使用可能でも、他のコンピュータでは使用不可能な場合もある。ファイルシステム側の制約とは直接関係ないものの、OS側の歴史的な経緯から使用不可能となっている記号もあるASCII.jp:Windowsでファイルやフォルダーに「使わない方がいい」文字 (1/2)。ファイルマネージャーやコマンドラインインタプリタ(シェル)上では命名に制限がかかっていても、APIによってはそのような制限がかからず、APIを使ったプログラムコードを書いて直接ファイルを作成することができてしまうケースもあるが、そういった標準規則違反のファイル名を付けてしまうとトラブルを引き起こすことが多い。
ファイル名として使用できない記号、および使用が不可能な理由について以下の表に示す。
記号 記号名 使用が不可能な理由 / スラッシュ パス名コンポーネント分離符として、UNIXなどのOSやDOSとWindowsでは使用不可能。 \ バックスラッシュ パス名コンポーネント分離符として、DOSとWindowsでは使用不可能。 ?クエスチョンマーク ワイルドカード(不特定だと示す記号)として使われるため、WindowsとAmigaOSでは使用不可能。 * アスタリスク ワイルドカードとして使用されるため、DOSとWindowsでは使用不可能。 : コロン ドライブレターに使用される、またはパス名分離符であるなどの理由から、Windows、AmigaOS、Mac OSでは使用不可能。 | バーティカルバーパイプの記号なので、Windowsで使用不可能。 MediaWikiでは、リンクのページ名と異なる文字列でリンク文字列を表示する際、リンク先ページ名と表示文字列の区切りに用いているため、使用不可能。 " 引用符 スペースを含むファイル名の始まりと終わりを指定するのに使われるため、Windowsで使用不可能。 < 小なり記号DOSとWindowsでは使用不可。 HTMLでは、各種タグのタグ名開始記号として用いているため、HTML本文内で使用不可能。HTML本文内で「<」記号を用いるためには、「<」記号の代わりに、「<」と記述しなければならない。 この影響により、MediaWikiにおいても「<」記号は直接記述できず、HTML本文内と同様に、「<」と記述しなければならない。MediaWikiでは通常「<nowiki></nowiki>」タグを用いるとマークアップを無効化することができるが、HTML自体の影響のためこれもできない。 > 大なり記号DOSとWindowsでは使用不可。 HTMLでは、各種タグのタグ名終了記号として用いているため、HTML本文内で使用不可能。HTML本文内で「>」記号を用いるためには、「>」記号の代わりに、「>」と記述しなければならない。 この影響により、MediaWikiにおいても「>」記号は直接記述できず、HTML本文内と同様に、「>」と記述しなければならない。MediaWikiでは通常「<nowiki></nowiki>」タグを用いるとマークアップを無効化することができるが、HTML自体の影響のためこれもできない。 &アンパサンドHTMLでは、前述の「<」「>」などの特殊記号の本文内入力時に、特殊記号識別子として利用するため、「&」はHTML本文内で使用不可能。HTML本文内で「&」記号を用いるためには、「&」記号の代わりに、「&」と記述しなければならない。 この影響により、MediaWikiにおいても「&」記号は直接記述できず、HTML本文内と同様に、「&」と記述しなければならない。MediaWikiでは通常「<nowiki></nowiki>」タグを用いるとマークアップを無効化することができるが、HTML自体の影響のためこれもできない。 . 終止符 8.3形式では2つ以上の終止符を使用できず、ファイル名の最初や最後に終止符を使うこともできない。 半角スペース(末尾) 8.3形式を取り扱うデータ構造上の都合から、DOSで使用不可能。 英小文字 CD-ROM向けファイルシステムのうち、ISO 9660 Level 1では使用不可能。DOSでは読み書き不能につき使用不可能。
日本語環境ではJIS X 0201の歴史的な経緯から、ASCIIのバックスラッシュに相当する0x5Cは半角円記号(円マーク)で表示されることが多いものの、フォントにも依存する。Windowsにおいて、ASCIIバックスラッシュと同じ文字コードを持つ半角の円記号はファイル名の一部として使用できないが、全角の円記号¥はファイル名の一部として使用できる。さらにUnicodeには別の円記号¥としてU+00A5が定義されており、これはWindows NT系OSおよびNTFSであればファイル名の一部として使用することはできる。ただし、Windows 9x系が使われていた時代やそれ以前Overview of FAT, HPFS, and NTFS File Systems - Windows Client | Microsoft Learnに開発されたFAT12/FAT16/FAT32などの古いファイルシステムでは、ファイル名のエンコードにOEMコードページ(ANSIマルチバイト文字セット)が使われている。システムロケールを日本語(Microsoftコードページ932)に設定したWindows環境の場合はWideCharToMultiByte()関数などを使ってUnicode文字列をOEMマルチバイト文字列に変換する際、U+00A5が0x5Cにマッピングされてしまう。この動作はディレクトリトラバーサルを引き起こす可能性があるセキュリティホールであるため、アプリケーションはFATファイル名として変換される可能性のある文字列にU+00A5が入り込まないように配慮すべきであるCharacter Sets Used in File Names - Win32 apps | Microsoft Learn。
使用が不可能なファイル名 一般的なファイルシステムでは、単独の.はカレントディレクトリを、..は上位ディレクトリを表す特殊なファイル名であるため、任意のファイル名として使うことはできない。
WindowsとDOSでは、以下の名前もOSによって予約されており、使用不可能である。
CON, PRN, AUX, CLOCK$, NUL COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM¹, COM², COM³ LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT¹, LPT², LPT³
WindowsはISO/IEC 8859-1(Windows-1252)の上付き数字(¹, ², ³)を通常の数字(1, 2, 3)として認識し、COM#とLPT#の有効な一部として扱うため、これらを含むパターンも予約されている§Naming Conventions : Naming Files, Paths, and Namespaces - Win32 apps | Microsoft Learn。
ここで挙げたものは不完全な一覧であり、ファイルシステムごとの正確な名前付けの規則については外部リンク先を参照されたい。
ファイル名の重複 前述したとおり、メモリ上のデータをファイルとして保存する際は、暗黙的または明示的にファイル名を設定する必要がある。ただし一般的には、1つのコンピュータに、同一のフルパスを持つファイルが複数存在することは不可能となっている。そのため、保存先として利用しようとしているストレージの中に、同一のフルパスを持つファイルがすでに存在する(同一の親ディレクトリ内にまったく同じ名前のファイルがすでに存在する)場合は、置き換える(上書き保存する)か、別名で保存するか、キャンセルするかを選択しなければならない。ファイル名の大文字と小文字を区別しない環境では、大文字と小文字の違いだけでは別名にならず、同じ名前として扱われることにも留意する必要がある。
しかし、業務用のメインフレーム(汎用機)等では、パス構造を採用しておらず、同じファイル名の存在を許容する場合があるが、一般には使用されていないため説明を省略する。
なお、一般的なオンラインストレージサービスでは、エンドユーザー向けに表示されているファイル名は便宜上の表示名 (display name) にすぎず、内部的なファイル名とは別物である。表示名を変更しても内部名は変わらず、変更履歴も継承される。そのため、Google ドライブのように同一の親フォルダー内に同じ名前を持つファイルが複数存在することが可能となっているサービスもある。ただし、まったく同じ名前を付けてしまうと紛らわしいため、管理しやすさの観点から異なる名前を付けるのが通例である。
脚注 注釈
出典
関連項目 ファイルシステム ディレクトリ 拡張子 長いファイル名 隠しファイルと隠しディレクトリ Uniform Resource Identifier (URI) Uniform Resource Locator (URL)
外部リンク Microsoft FAT、HPFS、NTFS ファイル システムについて Naming a File
pl:Ścieżka dostępu