DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ZIP書庫の圧縮・解凍に関する質問

環境/言語:[VB.NET]
分類:[.NET]

はじめまして。
http://dobon.net/vb/dotnet/links/createzipfile.html
を拝見させて頂いたものです。

上記で公開されているソースをテストしていて、問題にぶつかってしまったので書き込みさせていただきました。

上記の、#ziplibを使用する方法を試してみたところ、
「書庫内のファイルを展開する」でエラーが発生してしまいました。
ちなみに、#ziplibのバージョンは、0.85.5 です。

いろいろ試した見たところ、lhaplusなどのFreewareを使って圧縮したZIPファイルは問題なく解凍できるのに、上記で公開されている「書庫を作成(圧縮)する」のソース、つまり#ziplibを使って圧縮したZIPファイルは回答できないことがわかりました。

ちなみにエラーする場場所は、
len = zis.Read(buffer, 0, buffer.Lengh) で、
エラーメッセージは"Size mismatch : **** <-> ****" です。

おそらく、#ziplibのバグではないかと思うのですが、その確証が得られなくて困っています。

おそらく、上記記事を書いたときのバージョン0.81では動いていたソースだと思うのですが、どなたでも結構ですから、現在公開されているバージョン0.85.5を使ってエラーするかどうかを確認していただけないでしょうか?

「エラーしなかった」という情報が得られれば、問題は私のPC側だということになるので、それはそれで助かります。

もし、公開されているソースをこのように修正すればエラーが出なくなるというような情報をいただけるならば、この上ない幸せです。

誠に勝手なお願いで申し訳ないのですが、どうかよろしくお願いいたします。
ここにいくつかコメントが寄せられていますね。
http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=links%2Fcreatezipfile.html

CompressedSize を指定しないといけないというコメントがありますが、試していません。
2009/09/05(Sat) 09:10:44 編集(投稿者)

#ziplib のサイトにある "Source code and samples" のファイルをダウンロードしてきて、サンプルと何が違うかを比べる路線で、少し試しました。

該当のページのサンプルでは ZipEntry クラスのインスタンスの ze に対して Crc, Size のプロパティを設定していますが、これをコメントアウトしました。(DateTime だけ設定するようにした)
これにより、圧縮・解凍がうまく動いているように見受けられます。
2009/09/07(Mon) 18:25:49 編集(投稿者)
2009/09/07(Mon) 18:25:42 編集(投稿者)

> 該当のページのサンプルでは ZipEntry クラスのインスタンスの ze に対して Crc, Size のプロパティを設定していますが、これをコメントアウトしました。(DateTime だけ設定するようにした)

回答ありがとうございます。
DateTimeだけ設定するようにしたら、問題なく解凍できるようになりました。
パスワードなしの場合もパスワード付きの場合も、正常に圧縮解凍できます。
Crd,Sizeをコメントアウトすると、生成されたZIPファイルが、他のFreewareなどで圧縮したものより、多少サイズが大きくなるのがちょっと気になりますが、問題なく圧縮/解凍しているようにみえます。

このたびは誠にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板