[PR]当たる!無料占いで運命鑑定:プロの占い師による本格運命鑑定が無料で
32bit Windowsのファイル名に関して
Windows XP以前の時代の情報が中心です。。。最新の情報は、新しいMSDN等で確認してください。。
Windows95以降(32ビットWindows) において、ファイル名の規則といえば
・ 255文字までの長さのファイル名が付けられる
や
・ \ / , ; : * ? " < > | の11種類の文字はファイル名には使用できない
というのが一般的に知られています。
しかし、果たして本当でしょうか。
このページは、私が「お〜瑠璃ね〜む」を作成する過程で、
Windowsのファイル名に関する規則やバグ仕様に悩まされたことで
怒りにまかせて作成することにしました。
【まず最初に】
当たり前のことですが、完璧なソフトウェアというものは存在しません。
Windowsであればなおさらであっても、完璧ではありません。
Windowsで使われるファイル名に関してもしかり。
普通に扱う分には何も問題がないように思われますが、
細かく見ていくと、実はこれも同じように、完璧ではないのです。
Windowsでは、表面上に現れないバックグラウンドの部分で、ファイル名についての様々な処理をしています。
これは、ユーザーがファイル名を付けるときに、ファイルシステムを意識しないで使えるようにと、マイクロソフトが行っている隠蔽配慮なのかもしれません。
しかし、、、
【キホンのキ】
まずは用語です。
8.3 形式
拡張子を除くファイル名(1〜8文字).拡張子(1〜3文字) の形式のファイル名のこと。MS-DOSやWindows3.1では、原則この形式のファイル名しか扱えない。(VFAT対応ソフトを使えば別)
使用される文字は、英字大文字、数字、"_" です。
ロングファイル名
Windows 9x 系
Windows 95, 98, Me を指します。
Windows NT 系
Windows NT, 2000, XP を指します。
次に一般的に知られていることです。
「MS-DOSや、Windows3.1では、ファイル名は8.3形式でした。しかし、Windows95以降(32ビット Windows)になって、255文字までのファイル名を付けることができるようになりました。」
↑ 正確に書かれていて何も問題ないようですが、実はかなり曖昧なんです。(後述)
「ファイル名には、\ / , ; : * ? " < > | の11個の文字は使用できません。」
↑ おもいっきりうそです。(後述)
【表示されない拡張子】
設定で、[登録されている拡張子は表示しない] のチェックを外しているのに、表示されない拡張子があります。
それは、".lnk"、".url"、".pif" です。
一度でもこれらの拡張子を持つファイル名を付けてしまうと、その拡張子が隠れてしまい、
もはやエクスプローラからは変更できなくなります。
(追加、cnf, mydocs, shs, shb, desklink, MAPIMail等の拡張子も表示されないようです。)
【VFAT】
ロングファイル名が扱えるファイルシステムを、VFAT(Virtual File Allocation Table)といいます。
VFAT では、ユーザーは基本的にロングファイル名のみを扱いますが、システム内部的には 8.3 形式のファイル名も合わせて持っています。
Windows 9x 系 と Windows NT 系では、VFATの仕様が異なっています。
どのように異なっているかの詳細は分かりません。
#一体どこで公開されているのでしょうか >マイクロソフト
【付けられないファイル名】
ファイル名に使用不可能な文字を一切使っていないのに、絶対に付けられないファイル名というのも存在します。
それは、以下のファイル名です。
CON, AUX, COMn (nは1〜9), LPTn (nは1〜9), PRN, NUL
拡張子を付けて、"CON.bmp" 等にすることも出来ません。
#一昔前に "CONCON問題" というのがありましたから、CONは知ってる人も多いでしょう。
他にもこれだけあるのですね。
<応用編>
これらデバイスファイルは、MS-DOS時代に使われていたものですが、Windowsでも使えます。
例えば、コマンドプロンプトから、
echo "印刷テスト" > PRN
とすると、"印刷テスト" という文字がプリンタで印刷されます。(ちゃんと設定しないとダメですが)
【エクスプローラ上からは変更できないファイル名】
エクスプローラで変更できないファイル名があります。
1つ目は、先頭に ".(ドット)" のあるファイル名です。
ただし、既に先頭に "." のあるファイル名を、先頭に"."のないファイル名に変更することは可能です。
もう1つは、先頭に "半角スペース" のあるファイル名です。
このファイル名を付けようとすると、先頭の半角スペースが勝手に取り去られます。
これらは、エクスプローラからは変更できないだけで、WindowsAPI(プログラム)からであれば変更できます。
【使用できない文字のはずが】
Windowsでは、";(セミコロン)" や、",(カンマ)" のあるファイル名を付けることが出来ないとうたわれていますが、
普通に出来ちゃいます。
何故このようなウソが堂々とかかれているのか全く分かりません。
もちろん、MS-DOSでは使用できないのですが。
【半角スペース】
Windowsでは、半角スペースを含んだファイル名を付けることを禁止していません。
むしろ、Program Files や、Documents and Settings などOSが積極的に利用しています。
しかし、MS-DOS では引数を半角スペースで区切り文字として使用していました。
その名残かどうか分かりませんが、Windowsの一部のソフトウェアでは半角スペースのあるファイル名は正常に処理されません。
例えば、C:\Documents and Settings\user1\a.txt を開こうとしたら、
「C:\Documents が開けません」などというエラーが出るソフトもあるようです。
#あんたのとこのソフトだよ >マイクロソフト
【8.3 形式への変換規則】
Windows 9x 系 と Windows NT 系では、8.3 形式の名前への変換規則が違うようです。
そのため、Windows 98 と 2000 のデュアルブートなどでは、
一部のアプリケーションでエラーとなることもあるようです。
【ファイル名の長さ制限の違い】
Windows 9x 系 では、ファイル名の長さ制限は、絶対パスを含めて255バイトです。
つまり、2バイト文字換算では、127文字までということになります。
それに対し、Windows NT 系 では、全角半角に関わらず(つまり2バイト文字でも)、255文字までOKです。
< お〜瑠璃ね〜むでは、255バイトまでしか扱えません m(_ _)m>
【内部的なパスの長さ】
ファイル名の長さは 絶対パスを含めて255文字までと言っていますが、厳密には260文字までの領域が確保されています。
エクスプローラから変更しようとすると、255文字までしか入力できませんが、WindowsAPI(プログラム)からだと260文字までOKです。
【英字 大文字/小文字のフラグ】
Windows 9x 系では、"8文字以内.3文字以内" で名前を付けると、自動的に 8.3 形式(全て大文字) のファイル名になります。
しかも、[フォルダオプション]で、[全て大文字の名前を使用する] のチェックを外していると、
先頭のみ大文字で、2文字目以降は小文字で表示されてしまいます。(内部的には全て大文字なのだが)
しかし、Windows NT 系では大文字と小文字を判別するフラグを持っていて、
8.3 形式で名前を付けても大文字と小文字が区別されます。
【大文字小文字 勝手に変更】
Windows NT 系では、ファイル名を変更したとき、大文字小文字が指定したものにならない場合があります。
例えば、下のように変更した場合です。
| AbC.bmp | → | xxx.bmp | → | ABC.BMP (勝手に AbC.bmp に戻ってしまう) |
| (1) | | (2) | | (3) |
(1) は、"8文字.3文字" 以内のファイル名で、大文字と小文字が混在
(2) は、なんでもいい
(3) は、(1)のファイル名を、全て大文字か、全て小文字にしたもの
(1)は、8.3 形式 ではありません。なぜなら、全てが大文字ではないからです。
(3)こそが、(1)の 8.3 形式 です。
ファイル名を (3) に変更しようとしたとき、OSは
ファイルシステム(or ディレクトリ?)が保持しているファイル名(1) と見比べて、
(3) が (1) の 8.3 形式だった場合、ファイル名は(1)に戻ってしまうということらしいです。
何故このようなロジックにしているのか全く分かりません。
【ファイル名保持(バグ仕様)】
ファイル名の情報は、ディレクトリに保存されています。
ロングファイル名の付いたファイルを MS-DOS で削除すると、
8.3 形式の情報だけが削除され、ロングファイル名の情報がディレクトリに残ります。
【256文字以上のファイル名(バグ仕様)】
C:\フォルダA\longlonglong...150文字省略...longlonglong.txt
というファイル名があるとき、
「フォルダA」のフォルダ名をエクスプローラから
「longlong..110文字省略...longlongフォルダA」というフォルダ名に変えます。
すると、
longlonglong...150文字省略...longlonglong.txt は、
ファイル操作できなくなります。
これは、
C:\longlong...110文字省略...longlongフォルダA\longlonglong...150文字省略...longlonglong.txt
の絶対パスが255文字を超えてしまうために、正しく扱えなくなるからです。
これは、どうしようもない仕様なのかもしれません。
フォルダ名を変更するごとに、OSがそのフォルダ以下の全てのファイル名をチェックして、
255文字を超えないように入力できる文字を制限する仕様にしてもいいでしょうが、
そうすると、フォルダ名を変更するだけなのに、うるさいほどのディスクのアクセスと、
CPU使用率100%という悲しい結果となるでしょう。
それなら、各フォルダが、ファイル名の長さの最大値を内部で保持していたらいいのではないでしょうか。
例えば、
D:\aaa\zzz.txt
D:\aaa\bbb\yyy.txt
D:\aaa\bbb\xxxxx.txt
D:\aaa\ccc\wwwwww.txt
の4つのファイルのみがあったとすると、
aaaフォルダは、"\ccc\wwwwww.txt" の文字数である 15 という数字を保持し、
bbbフォルダは、"\xxxxx.txt" の文字数である 10 という数字を保持します。
これにより、
aaaフォルダは、255 - 15 - 3("D:\"の文字数)=237文字までしか入力できず、
bbbフォルダは、255 - 10 - 7("D:\aaa\"の文字数)=238文字までしか入力できません。
この仕様であれば、計算時間も問題なく済むと思うのですが、、どうでしょう?
【ファイル名とファイル数の制限】
ルートディレクトリには、ファイルが 512個 までしか作成できません。
ファイル名が長いと、作成できる数が 512個 よりも少なくなるようです(?)。
ルートディレクトリより下の階層では、ファイル数の制限はありません。
【ドライブ名】
一般的にドライブ名といえば、"C:" や、"D:" などですが、
完全なドライブ名前は "\\.\C" や、"\\.\D" となっています。
【ハートマーク】
Windows NT 系では、ファイル名を Unicode で扱っているので、
ファイル名に S-JISには無い文字を付けることが出来ます。
例えば、ハートマーク なんかがそうです。
こんな感じ
やり方は、他のサイトを参照して・・・って、他のサイトでこのやり方を紹介しているところが見つかりませんねぇ。
みなさん、あまり知らないのかな?? (^_^)
ハートマークのような文字(S-JISに変換できないUnicode)を含んだファイル名を付けると、多くのソフトウェアで扱えなくなりますので、
注意!
< お〜瑠璃ね〜む ver2.5.1β1では、ハートマークを付加できます(?) >
戻る
[PR]≪占い奇跡の恋愛術≫初回無料:幸せな結婚へ導きます。本格結婚鑑定