- - PR -
C# 2005 ziplib使用してパスワード付zipファイル作成後、解凍出来ない件
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-25 21:18
Visual C# 2005, OS Win XPを使用しています。
ICSharpCode.SharpZipLib.dllのバージョンは0.85です。 ziplibでのパスワード付zipファイル作成して zipファイルを右クリックの全て展開で解凍する際にパスワードが 違うと言われてしまい解凍出来ません。 プログラム実行時には特にエラーは表示されません。 なぜパスワードが違うと表示されるのか原因分かりますでしょうか? ソースの該当部分です。 //作成するZIPファイルの設定 string zipPath = @"C:\temp\test.zip"; //圧縮するファイルの設定 string[] filePaths = { @"C:\temp\test1.txt", @"C:\temp\mt.txt" }; ICSharpCode.SharpZipLib.Checksums.Crc32 crc = new ICSharpCode.SharpZipLib.Checksums.Crc32(); System.IO.FileStream writer = new System.IO.FileStream( zipPath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.Write); ICSharpCode.SharpZipLib.Zip.ZipOutputStream zos = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(writer); //圧縮レベルを設定する zos.SetLevel(6); //パスワードを設定する zos.Password = "aaa"; //Zipにファイルを追加する foreach (string file in filePaths) { //ZIPに追加するときのファイル名を決定する string f = System.IO.Path.GetFileName(file); ICSharpCode.SharpZipLib.Zip.ZipEntry ze = new ICSharpCode.SharpZipLib.Zip.ZipEntry(f); //ヘッダを設定する //ファイルを読み込む System.IO.FileStream fs = new System.IO.FileStream( file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); fs.Close(); //CRCを設定する crc.Reset(); crc.Update(buffer); ze.Crc = crc.Value; //サイズを設定する ze.Size = buffer.Length; //時間を設定する ze.DateTime = DateTime.Now; //新しいエントリの追加を開始 zos.PutNextEntry(ze); //書き込む zos.Write(buffer, 0, buffer.Length); } zos.Close(); writer.Close(); | ||||
|
投稿日時: 2008-11-26 09:04
Lhasa や Lhaz などの専用ツールで解凍した場合は成功するのでしょうか?
_________________ Nakamura Blog | ||||
|
投稿日時: 2008-11-26 09:33
Lhasaだと設定したパスワードで解凍出来ました。
OS標準のzip解凍だとなぜパスワードが違うと表示され 解凍出来ないのでしょうか? | ||||
|
投稿日時: 2008-11-26 10:28
WindowsXP + SP2 の環境で試してみました。
まず、SharpZipLib のバージョン 0.84 で試したところ解凍に成功しました。 次に、SharpZipLib の最新版 0.855 で試したところ「パスワードが違う」と表示され失敗しました。 この結果だけを見ると SharpZipLib の不具合かも・・・。 _________________ Nakamura Blog | ||||
|
投稿日時: 2008-11-26 10:35
時間と気力があるなら、SharpZipLib のソースコードを読むといいです。
解決の糸口が見つかるかもしれません。 http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx _________________ Nakamura Blog | ||||
|
投稿日時: 2008-11-26 10:59
SharpZipLib のバージョン 0.84 で試したところ解凍に成功しました。
との事ですが最新ではなく、当該バージョンをダウンロードする URLはありますでしょうか? | ||||
|
投稿日時: 2008-11-26 11:06
ZIPの内部形式は複数のバージョンや亜種があります。
それぞれ圧縮アルゴリズムや、暗号アルゴリズムが異なるので、その関係かもしれませんよ。XPが対応しているZIPファイル形式の種類はちょっと把握していませんが、そのあたりを確認してみてはいかがでしょう? [ メッセージ編集済み 編集者: 甕星 編集日時 2008-11-26 11:07 ] | ||||
|
投稿日時: 2008-11-26 11:45
こんにちわ
おそらくZIP圧縮方式の指定でいけるかと。 こちらでは以下のコードを入れたところ、解凍できました。
http://www.componentspot.com/doccenter/SharpZipLib/icsharpcode.sharpziplib.zip.compressionmethod.html ただ、上記でいいかはご検討ください。 以上、参考までに。 ※OS提供の解凍ツールでの解凍は要件なのでしょうか・・ Lhasaで解凍できるならそれでいい気がしますが・・・ <font size=-1>[ URL変更 編集者: Toshi 編集日時 2008-11-26 11:58 ]</font> [ メッセージ編集済み 編集者: Toshi 編集日時 2008-11-26 12:11 ] |