[Namazu-win32-users-ja 1251] Re: mknmzの処理が中断する

Yukio USUDA m6694ha392t @ asahi-net.or.jp
2010年 9月 21日 (火) 23:26:25 JST


臼田です。


MS-Windows でのファイル名の長さの制限については
MSDN にも書かれています。
http://msdn.microsoft.com/ja-jp/library/aa365247%28v=VS.85%29.aspx

Unicode 系の API を使えばフルパスで 32,767 文字までつかえるようです。
(その場合でも一つのフォルダ名、ファイル名は 255 文字まで
(バイト数ではなく文字数制限のようです))

NTFS 自体には長いパス名は作れるので
cd で下のフォルダに移動しながら作成するとか
フォルダごと下層フォルダにコピーするなどすれば
かなり長いパス名が作れますが、
できてしまったファイルには Unicode 系の API を使って作られた
ツールでなければフルパス名でアクセスすることはできなくなります。

現行の MS-Windows 版の mknmz では Unicode 系の API は使用していない
ためフルパス名 256 文字の制限に引っかかるものと思います。

最近 Win32::Unicode というモジュールを見かけました。
http://search.cpan.org/~xaicron/Win32-Unicode/
http://perl-users.jp/articles/advent-calendar/2009/hacker/20.html
これを用いれば "表" などの 0x5C を含む文字の問題も解消されるはずですし、
日本語に限らず多言語対応も考慮できるのかもしれません。
ただ MS−Windows 環境に特化した改修になるので取り組むべきかどうか
難しいですね。

当面の解決方法の一つとしては、
Linux サーバ環境を用意して MS-Windows の共有フォルダをsmbfs で
文字コード EUC-JP でマウント
# mount -t cifs -o codepage=cp932,iocharset=euc-jp,username=ユーザ名,password=パスワード,ro //サーバ名/フォルダ名 /mnt/winfolder

して Linux 側で mknmz を実行するというものがあります。

臼田幸生



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