Namazu-win32-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: パスを含めて256 バイト以上のファイルのインデックスを作るには



芳賀です。

http://beefway.hp.infoseek.co.jp/prog/filename.html
あたりを参考にしてなのですが、

windowsNT系では、ファイル名をunicodeで扱っているので、
半角も全角も区別なく255文字までつけられるようです。

今回の問題は、windowsNT系で日本語の長いファイル名をつけ、
「256バイト以上255文字以下」であるファイル名のファイルが
認識されないということなのですね。

#私がエクスプローラで開けますかと聞いたのは、
#例示したURLの下の方にある「256文字以上のファイル名」にある、
#後からフォルダ名を長くしてパスが256文字を超えてしまった場合を想定してでした。

mknmzの中では、ファイル一覧は取得できているのですが、
ファイルのテストで蹴られているようです。

どうやらperlの問題かなあとおもいます。
-f ファイル名
-r ファイル名
という形でファイル属性をテストする演算子があるのですが、
255バイトを超えてしまったファイルについては
きちんと値が返ってきません。
(ActivePerl build633で確認)

#!/perl

opendir(DIR, '.');
while (defined($dir = readdir(DIR))) {
print "$dir ,".(-r $dir) ."," .(-f $dir) . "\n";
}
closedir(DIR);

という簡単なスクリプトを書いてみたのですが、

C:\test\1234567890123456789012345678901234567890123456789012
34567890123456789012345678901234567890123456789012345678901234567890123456789012
34567890123456789012345678901234567890>perl 123~1.pl
. ,1,
.. ,1,
123456789012345678901234567890123456789012345678901234567890123456789012345.htm
,,
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345.html ,,
1234567890123456789012345678901234567890
12345678901234567890123456789012345.htm ,,
1234567890123456789012345678901234567890
123456789012345678901234567890123456.pl ,,

となってしまいます(本当は ファイル名,1,1 となってほしい)

回避策ですが、
長いのがディレクトリ名であればですが、
短い形式でディレクトリ名を入れて長さが短く収まれば回避できるかもしれませんね。
同じディレクトリで同じスクリプトを実行してみたのですが、

C:\test\123~1>perl 123~1.pl
. ,1,
.. ,1,
123456789012345678901234567890123456789012345678901234567890123456789012345.htm
,1,1
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345.html ,1,1
1234567890123456789012345678901234567890
12345678901234567890123456789012345.htm ,1,1
1234567890123456789012345678901234567890
123456789012345678901234567890123456.pl ,1,1

となり値が返ってきます。
この状態であれば

C:\test\123~1>mknmz . -U
検索対象のファイルを調べています...
3個のファイルがインデックス作成の対象として見つかりました
1/3 - /C|/test/123~1/12345678901234567890123456789012345678901234567890123456
7890123456789012345.htm [text/html]
2/3 - /C|/test/123~1/12345678901234567890123456789012345678901234567890123456
78901234567890123456789012345678901234567890123456789012345678901234567890123456
789012345.html [text/html]
3/3 - /C|/test/123~1/1234567890123456789012345678
9012345678901234567890123456789012345678
9012345.htm [text/html]
インデックスを書き出しています...

というようにきちんとインデックス出来るようです。

あとはやっぱり隠し共有とかつかって新たにドライブ名をつけるのがいいんじゃないでしょうか。
ファイル名自体が非常に長いのであれば厳しいですが。