2005/09/28(水)春Mバグ(多分その3くらい)
2005/09/28 11:00
最初はディスク不良かと思って相当慌てたが、春Mの問題だった。
バグというより設計が古いことによる。
Windows上のファイル名制限はここに詳しいが、
http://beefway.hp.infoseek.co.jp/prog/filename.html
要はNT系と9x系の差異に引っかかった。
・NT系は絶対パスで"「2バイト文字を含め」255文字まで"
・9x系は絶対パスで"255byte"まで
つまり、日本語等2バイト文字を含むディレクトリ・ファイル名で、255"byte"を超え255"文字"以下のものはNT系では問題ないが9x系設計では引っかかる。この奇妙な仕様は政治的判断で導入されたことが想像に難くないが、MSもバカなことをしたものだ。この問題気がつきにくいだけに凄まじい数のソフトがひっかかってそう。MFCとか使ってりゃだいじょうぶなのかも知らんけど。
で、春M上でそのようなファイルを扱うとどうなるか。実験してみた。
1.絶対パス含め260byte以下
問題なし
2.絶対パス含め261byte~パスを含まないファイル名260byte
リネーム・ムーブのみ可能。外部プログラム呼び出し・内部プログラム共にこのファイルを対象に操作不可。このファイルをコピーしようとするとエラーメッセージを出さずに(!)失敗する。
3.パスを含まないファイル名261byte~
春M上からファイルが見えなくなるとともに、ファイルエントリ上(多分)で当該ファイル以降に記録され同じフォルダにあるファイル全てが見えなくなる。そのフォルダにファイルを追加した場合、その条件に該当するのでやはり見えない。
……これは怖い。2と3の境は春M内部のファイル名格納配列の上限で引っかかってるような気がするのだが、260確保してるのだろうか? ううむ。
3は知ってさえいれば操作中に気づくことがほとんどだと思うのだが、2はフォルダコピーでファイルが欠ける最悪の事態に気づかない可能性がある。
打開策は春Mを使わないことだが、なかなか離れられない。もし誤魔化して使っていくならばフォルダをあまり深く切らないこと、日本語ファイル・ディレクトリ名を避けること。日本語を含むディレクトリはコピー時エクスプローラだけしか使わないようにする。WinCDRはパス255byteオーバーで警告を出すようなので、焼き込み時に消失していた事はなさそうなのが救い。
つうか何でこんな仕様にしたんだよ…… MSめ。
2005/09/28(水)春Mパッチ発見
2005/09/28 11:00
http://homepage3.nifty.com/k-takata/mysoft/springm.html
しかし逆アセンブル(?)したのかこれ。凄まじいな……3