2

Sharpziplibを使用して既存の.zipファイルにファイルを追加しようとしています-問題は、zipファイルのサイズが1GBであるということです。1つの小さなファイル(400k)を追加しようとすると、sharpziplibは新しいファイルを追加する前に元のzipファイルのコピー/一時を作成します-これは、空きディスク容量がしようとしているzipファイルの2倍未満の場合に問題を引き起こしますアップデート。

例:1GB zip myfile.zip 1GB zip myfile.zip.tmp.293

ZipFile zf = new ZipFile(path);
zf.BeginUpdate();
zf.Add(file);   // Adding a 400k file here causes a 1GB temp file to be created
zf.EndUpdate();
zf.Close();

これを行うためのより効率的な方法はありますか?

ありがとう :-)

4

2 に答える 2

3

答えが見つかりました:

http://community.sharpdevelop.net/forums/p/5934/17056.aspx#17056

やあ、

新しいZipアーカイブを作成する場合は、代わりにZipOutputStreamクラスを使用する方が簡単な場合があります。

更新する場合は、必要に応じてZipFileクラスを取得してディスク上の既存のアーカイブに直接書き込むことができます。IArchiveStorage(ライブラリはDiskArchiveStorageを提供します)は、BeginUpdateが呼び出されたときに渡される主要なインターフェイスです。SafeまたはDirectに設定できるUpdateModeプロパティがあります。

うまくいけば、その影響は明らかです。更新中に失敗すると、アーカイブが破損し、データが失われる可能性があります。

hth、-jr-

于 2010-06-08T01:48:42.443 に答える
0

zipファイルを最初から作成する場合は、ZipFileの代わりにZipOutputStreamを使用してください。この例は、SharpZipLibソースにあります。ZipOutputStreamが既存のzipファイルへの追加をサポートしているかどうかはわかりません。そのため、それがあなたの行っていることである場合、私には有用な答えがないのではないかと思います。

于 2010-06-07T06:56:20.067 に答える