ロングファイル名
読み:ロングファイルめい
外語:LFN: Long File Name
MS-DOS
で長く使用されてきた8+3文字の名前より長い
ファイル名
のこと。または、それら長い名前が使用できる環境や仕様のこと。
目次
概要
特徴
互換性確保
拡張子とエイリアス
エイリアス名
内部技術
表現方法
ディレクトリエントリ
仕様
概要
UNIX
などでは古くから長いファイル名が使えたが、
MS-DOS
や初期の
Microsoft Windows
では使えなかった。
これは、
オペレーティングシステム
(OS)の制限というだけではなく、MS-DOSが採用した
FAT
という
ファイルシステム
の制限も加わっていたためである。別のファイルシステムに変えることは現実に極めて難しいことだったため、仕方なく8+3文字の名前で我慢していたのであった。
しかしこれも、OS側の改良として
Windows 95
からは
VFAT
と呼ばれる仮想レイヤーが用意され、またファイルシステム側の改良としてFATでも強引な拡張により長いファイル名を格納する手法を確立したことにより、以降は長いファイル名も利用可能となった。これを「ロングファイル名」という。
以降はこの方法についての技術的なことを述べる。
特徴
互換性確保
敢えてFATという従来通りのファイルシステムを使う以上、従来との互換性確保が求められる。
そこでこのメカニズムでは、長いファイル名と同時に、従来どおりの8.3に短縮したエイリアス名(別名)が作成される。なお、ファイル名が8.3文字以内であり名前の全てが英大文字、つまりFATと互換性のあるファイル名の場合は、エイリアス名は作成されない。
一方、長いファイル名は
Unicode
(
UTF-16
)で保存される。長いファイル名では、大文字と小文字はそのままで保存されるが、文字の大小のゆれは同一ファイル名と認識されるため、たとえ文字の大小が違っていても、同名であれば同一フォルダー内に共存させることはできない。また検索などでも大文字と小文字は区別されない。この仕様は従来のソフトウェアとの互換性のための配慮である。
つまり、一つのファイルは最大で二つのファイル名を持つことになる。
拡張子とエイリアス
ファイル名に、ピリオドを複数入れることが出来る。そして、最後のピリオドの後が拡張子となる。
拡張子は3文字より長くても良いが、エイリアスには頭の3文字だけが使われる。
なお、ファイル名の先頭がピリオドで、他にピリオドがない場合には拡張子なしと判断される(但しExplorerを使用した場合には、このようなファイル名はエラーとして弾かれ作成できない)。
また、ファイル名の末尾のピリオドは削除される(file....などはfileとなる)。
エイリアス名
エイリアス名は、長いファイル名の最初の6文字に数値テール(~1)を付けてエイリアス名とする。
既に重複するエイリアス名がある場合には、数値テールを1ずつ加算して重複しない名前を作る。
~9を超えてもまだ重複するファイル名がある場合には~10のようになり、長いファイル名の最初の5文字に数値テール(~10)という形式になる。
以降、重複するエイリアス名がなくなるまで、これがくり返される。
エイリアス名は、現在のコードページのOEM文字セットで、大文字に変換されて保存される(
MS-DOS
形式)。つまり日本語環境なら
シフトJIS
が使われる。
内部技術
表現方法
FATである以上、
ディレクトリエントリ
は一つにつき32バイトである。これはてこでも動かない。
そこで、従来と同様の形式でディレクトリエントリを作ることとし、ここにはエイリアス名を書くこととする。これにて互換性は確保できる。
そしてこのディレクトリエントリ(DE)に先立つように、逆順に拡張領域を並べることとした。この拡張領域をロングネームディレクトリエントリ(LNDE)と呼ぶ。
つまり、ディレクトリエントリは次のように並ぶ(とても長い場合)。
最後のLNDE
…
3番目のLNDE
2番目のLNDE
1番目のLNDE
8.3形式のDE
拡張領域は、ファイル属性をR+H+S+Vとすることで表現する。
ファイル属性
は2ビット予備があるのでそれを用いても良かったのだが、ロングファイル名未対応の旧式MS-DOSでは何も無いかのように扱わせるため、このような強引な拡張方法を取ることとなった。
ディレクトリエントリ
VFATで拡張された専用のエントリである。従来のFATエントリとは異なる機構で扱われる。
エントリはFATなので一つにつき32バイトであり、次の順に格納される。
シーケンス番号(1バイト)
ビット7: 1=削除されている
ビット6: 0=LFN継続、1=最終LFNシーケンス
ビット5〜0: LFN番号 (1〜63)
ファイル名1(10バイト=5ワード)
ファイル属性(1バイト、常に0x0f)
予約(1バイト、常に0)
DOS名チェックコード(1バイト)
ファイル名2(12バイト=6ワード)
先頭クラスター(2バイト、常に0x0000)
ファイル名3(4バイト=2ワード)
この構造は、FATとの互換性に配慮されており、ファイル属性、先頭クラスターは位置が保存されている。
一つのエントリに、Unicode(UTF-16)文字を13文字格納できる。ロングファイル名はNUL末端であり、つまりUTF-16で0x0000が必ず最後に付けられる。
仕様
VFATにおける仕様は、次の通りである。
ファイル名の最大長: 256(末端NULLを含む)
パス名の最大長: 260(末端NULLを含む)
使用可能文字種: 英数字、文字、スペース、下記記号
エイリアス名: !#$%&'()-^`@~{}
長いファイル名: !#$%&'()-^`@~{}_=[];+,
再検索