ここで少し書いたけど、今回はファイルネームの話。
元々古いDOS時代にはファイル名というのは8文字+3文字の拡張子形式で作成されていた。UnixやMacOS、同じマイクロソフトのWindowsNTのNTFSと呼ばれるファイルシステムでは以前からそれ以上の長いファイル名が使用可能であったが、FATでは長い間この制限があった。
DOSの頃からずっとパソコンを使い続けている人の中には、今でもファイル名は8+3文字で可能な限り半角英数で付けるという人がいたりする。
ちなみに半角英数で名付けるのは、万が一ディスクが破損するなどして、データレスキュー作業をする際に、半角英数ならば簡単にファイル名を入力することができるから。全角で名付けたりしていれば、必要最小限度のシステムで起動した際などにファイル名を入力できなかったり、そもそも文字化けしてしまいファイル名の表示すらできなくなってしまうことがあるから。
1994年に発売されたWindowsNT3.5において初めてFAT16のファイルシステム上でロングファイルネームが使用できるようになり、翌年のWindows95で一般向けにも普及しだした。
パス名付きのファイル名の長さ全体をパス長と言うが、
Windows95のGUIモードではパスバッファが259文字分しかないので、「C:\TESTFILE」ディレクトリの下にファイルを作成する場合には
259-12=247文字までのファイル名
しか作ることができない。
さらに深い階層や長いパス名のディレクトリにファイルをコピーすることはできない。ちなみにルートディレクトリのファイル名格納方法はMS-DOS1.0の頃から変わっていないので、長いファイル名を使うとファイル名の格納エリアがあふれてしまい、空き容量があるにもかかわらず記録できないという事態が発生する。
ちなみにフロッピーディスクでは255文字のファイル名を使用すると8個までしかファイルを記録することができない。
これがMS-DOSプロンプトになると、若干異なり、ファイル名の長さは255文字となるが、コマンドラインで一度に入力できる文字数がデフォルトで128文字となっているので、それ以上の長さにはできない。
昔懐かしいconfig.sysでshell=command.com /p /u:255 /l:1024 /e:2048と指定し、1行の大きさを大きくしても255文字が限界であるので、非常に長いファイル名をコマンドラインで扱うことはできない。
ファイル名に使用できない文字は「.」「,」「\」「/」「:」「*」「?」「"」「<」「>」「|」の各文字、英半角の大小文字は区別されない。
ピリオド以降を拡張子とするが、3文字までという制限はなく、ファイル名全体で255文字となっている。
ショートファイルネームとして使えない文字は、制御記号、スペース、「"」「*」「+」「,」「.」「/」「:」「;」「>」「=」「<」「?」「[
」「\」「]」「|」英小文字
複数のカンマをロングファイルネーム中に使用できるが、拡張子として識別できるのは最後のピリオド以降
スペースが入るファイル名は「""」で囲むことで指定が可能
ちなみにNTFSでのロングファイルネームは拡張子を含めて255文字まで、名前には大文字と小文字を使用できるが区別はされない。
使用できない文字は「?」「"」「/」「\」「<」「>」「*」「|」「:」
なおコマンドラインから作成する場合は253文字までとなっている。
ちなみにロングファイルネームが作られると必ず8+3形式のショートファイルネームが同時に作成されている。
ロングファイルネームが8.3形式以内の場合はショートファイルネームも同じものが作成されるが、長い場合には、先日も書いたように先頭からスペースをのぞいた6文字をショートファイルネームにつけ(但し6文字目が2バイト文字の1バイト目の場合は5文字目まで)「~1」「~2」の様に番号をつけていくことととなっている。
拡張子については拡張子部分のスペースをのぞいた先頭から3文字となる。
同じファイル名と拡張子を持つファイル名がある場合は作成順に番号が付いていく
ファイルが削除されるなどして中抜きになると、同じファイル名が次に出てきた場合にはその抜けた番号を使うことになっっているので、ショートファイル名と作成日時のタイムスタンプは同じ順序に並ぶのが本来の姿となる。
論理的には9+99+999+9999+65535=76641個のファイルが作成できるが、FAT16の場合は0バイト以外のファイルは1ドライブあたり最大65530個しか作れない。
なお、ロングファイルネームの名前を変更するとショートファイル名の番号が変化する。(新しいロングファイルネームとショートファイルネームを作成し、元のファイル名を削除するため)
ファイルのコピーをする際にコピー先で新規作成されたときと同じように新たな番号を割り付けるために、コピーされる順番によりファイル名が変わってしまうという現象が発生するので注意が必要となる。
ロングファイルネーム TESTFILE1.TXT ショートファイルネーム TESTFI~1.TXT
TESTFILE2.TXT TESTFI~2.TXT
というファイルをコピーする際に、TESTFILE2.TXTを先にコピーしてしまうと
TESTFILE2.TXTのショートファイルネームがTESTFI~1.TXT
TESTFILE1.TXTのショートファイルネームがTESTFI~2.TXT
と変化してしまうので、厳密には気をつけなければいけない。
ちなみに8+3形式以下のファイル名でもロングファイルネームが作成される場合とそうでない場合がある。
TEST.TXT この場合はショートファイルネーム
test.txtやTest.txt この場合は英小文字があるので、ロング、ショート両方の名前が作成される
テスト.TXT 全角文字があるので両方作成
TESTTESTTXT ピリオドがないので拡張子無しの11文字のファイル名
12345678.123 ショートファイルネーム
(####).$$$ ショートファイルネーム
[TEST].TXT ショートファイルネームで使えない文字があるので両方作成される
アルファベットだけのファイル名であれば、ショートファイルネームのみの場合、ファイルアイコンで表示されるファイル名の最初の1文字だけは大文字表記となる。
なお、ショートファイルネームは普段エクスプローラを使用していても見えないが、コマンドプロンプトで「dir」コマンドを「/X」オプションを付けて実行すると、ロングファイルネームに対になったショートファイルネームを見ることができるし、WinFDの様なファイラーを使用すれば、簡単に見ることが可能である。
最近のコメント