- PR -

C# 2005 ziplib使用してパスワード付zipファイル作成後、解凍出来ない件

投稿者投稿内容
トム
会議室デビュー日: 2008/08/21
投稿数: 6
投稿日時: 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/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-11-26 09:04
Lhasa や Lhaz などの専用ツールで解凍した場合は成功するのでしょうか?

_________________
Nakamura Blog
トム
会議室デビュー日: 2008/08/21
投稿数: 6
投稿日時: 2008-11-26 09:33
Lhasaだと設定したパスワードで解凍出来ました。
OS標準のzip解凍だとなぜパスワードが違うと表示され
解凍出来ないのでしょうか?
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-11-26 10:28
WindowsXP + SP2 の環境で試してみました。

まず、SharpZipLib のバージョン 0.84 で試したところ解凍に成功しました。
次に、SharpZipLib の最新版 0.855 で試したところ「パスワードが違う」と表示され失敗しました。

この結果だけを見ると SharpZipLib の不具合かも・・・。


_________________
Nakamura Blog
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-11-26 10:35
時間と気力があるなら、SharpZipLib のソースコードを読むといいです。
解決の糸口が見つかるかもしれません。

http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

_________________
Nakamura Blog
トム
会議室デビュー日: 2008/08/21
投稿数: 6
投稿日時: 2008-11-26 10:59
SharpZipLib のバージョン 0.84 で試したところ解凍に成功しました。
との事ですが最新ではなく、当該バージョンをダウンロードする
URLはありますでしょうか?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2008-11-26 11:06
ZIPの内部形式は複数のバージョンや亜種があります。

それぞれ圧縮アルゴリズムや、暗号アルゴリズムが異なるので、その関係かもしれませんよ。XPが対応しているZIPファイル形式の種類はちょっと把握していませんが、そのあたりを確認してみてはいかがでしょう?

[ メッセージ編集済み 編集者: 甕星 編集日時 2008-11-26 11:07 ]
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-11-26 11:45
こんにちわ

おそらくZIP圧縮方式の指定でいけるかと。
こちらでは以下のコードを入れたところ、解凍できました。

コード:

// 前略
ICSharpCode.SharpZipLib.Zip.ZipEntry ze =
new ICSharpCode.SharpZipLib.Zip.ZipEntry(f);
ze.CompressionMethod = CompressionMethod.Stored;
// 後略



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 ]

スキルアップ/キャリアアップ(JOB@IT)