しかし。

In article <42346F92.8128436C@ht.sakura.ne.jp>,
IIJIMA Hiromitsu  <delmonta@ht.sakura.ne.jp> wrote:
>いいじまです。

>まず、VFAT以前は、ファイル名に小文字は使えませんでした。
>もちろん、ディレクトリを直接書き換えて小文字のファイルを作ることは可能だ
>けど、そうすると open() で扱えなくなる、と記憶しています。

 「VFAT って何?」とゆー厭味はいい加減食傷気味でしょうから
黙認するとして、小文字ファイル名を MS-DOS で扱うという問題は、
私の周辺では結構頻繁に発生していました。
 というのも、当時 SHARP X68000 の floppy format が、普通の
FAT (NTT format だっけ?) を case sensitive に拡張したものだ
ったため、Human68k 上で普通に floppy を作ると小文字のファイ
ル名になっちゃうからでした。

 で、MS-DOS の open() 相当の function call には、FCB を用い
た 2.x 時代の function 0Fh と、ファイルハンドルを用いた 3.x
以降の function 3Ch とがあるんですが、小文字ファイル名は何故
か前者で読めて後者で読めないという状況だったと思います。
 勿論、MS-DOS 3.x 以降だとほぼ全てのシステムコマンドが 3Ch
の方で実装されているので普通には読めないことになるんですが、
2.x 時代のバイナリをどっかから拾ってくると 0Fh の方で実装さ
れてるのでおっけー、なんて状況でした。
 尤も、FCB による実装だとディレクトリ階層に対応してないので
ルート直下のファイルしか読めないんですが :-)

# んー、その後 NEC DOS だと駄目で EPSON DOS だとおっけー、
#てな状況もあったような気がするけど、検証するのは面倒そうな
#のでこの辺でやめとこー。


>そして、少なくとも 98 では、オプション設定でこの書き換えを抑止できます。

 フォルダオプションの「全て大文字の名前を使用する」ですね。
NT architecture は SFN 領域の case の扱いが 95 architecture
と違うんで、XP だとうまくいかないかも知れません。
 というのも、XP の SFN の扱いとしては、ディレクトリエントリ
の 1bit を「小文字フラグ」として採用してますんで、95/98 で作
ったファイルだと無条件に「全部大文字」としか見なしてくれない
と思います。
 で、そういうファイルをコピーすると、LFN 領域に無理から「先
頭だけ大文字」とゆーファイル名を作成したりして、そうなるとも
うそのファイル名は本当に「先頭だけ大文字」という扱いしか出来
なくなっちゃう訳で。

 NT の頃に検証したきり最近は hack してないので、この辺りの
状況が XP でどうなってるのかは知りませんが、まぁ昔はそういう
訳の判らん勝手な操作をやってた時期があるとゆーことで。

-- 
                                               しらい たかし