[Namazu-win32-users-ja 1262] Re: 解決しました( Re: mknmzの処理が中断する )

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2010年 10月 2日 (土) 22:52:48 JST


寺西です。

Yukio USUDA wrote:
> 
> > Unicode 版 API を使えばこの制限はクリアできるのですが、ActivePerl は
> > 対応していないので、Win32:API (か、Win32::Unicode なのかな?) を使って
> > Windows べったりのコーディングを行わないといけない気がして、乗り気に
> > なれませんね。
> 
> Win32::API は生の API を操作させられるような感じがしますが
> Win32::Unicode は Perl の関数に似せた関数を割り当ててあるので
> 比較的 MS−Windows を意識しない書き方にできるとは思います。

そこはそうなんですが、
Unicode 版 Win32 API で _MAX_PATH の制限を外すにはパスの頭に "\\?\" を
付ける必要があるので、Win32::Unicode ではたして _MAX_PATH の制限が
外れるかどうかは微妙だと思っています。

単純に Unicode 版の API を使うとなっているだけだと、漢字コードは 
Unicode (といっても UTF-8 ではないような。UTF-8 が扱えるのかな?)に
なって良いのだけれども、結局 _MAX_PATHの制限は超えられないおそれが
あります。

その場合は、Unicode 版の Win32 API を使って、パスの頭に "\\?\" を
付けてってことになり、Windows べったりのコーディングになりかねません。

> > しかも、フィルタプログラムはそのような長いパスを扱えない可能性が
> > あるので、短いパスにワークディレクトリを掘ってそこで実行する
> > ような仕組みとか必要そうです。
> 
> こちらは既に完了しています。

日本語のパスを含む場合はテンポラリに別名でコピーして読み込んで
それを処理するようにしていたので、日本語以外でもやらないといけ
ないかなと思いましたが、
フィルタに渡すところでは読み込み済みのデータを渡すようになっている
ので、ここは問題ないですね。

# そういえば、積極的に書き換えたような記憶がよみがえってきた。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E


Namazu-win32-users-ja メーリングリストの案内