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 时传递的关键接口。它有一个 UpdateMode 属性,可以设置为 Safe 或 Direct。

希望其影响是显而易见的。更新过程中的失败可能会损坏存档并丢失数据。

hth,-jr-

于 2010-06-08T01:48:42.443 回答
0

如果您从头开始创建 zip 文件,请使用 ZipOutputStream 而不是 ZipFile。您可以在SharpZipLib 源代码中找到这方面的示例。我不确定 ZipOutputStream 是否支持添加到现有的 zip 文件,所以如果这就是你正在做的事情,恐怕我没有有用的答案。

于 2010-06-07T06:56:20.067 回答