sharpziplib - 你可以添加一个文件而不先复制整个zip吗?

时间:2010-06-07 04:31:05

标签: c# performance sharpziplib

我试图使用sharpziplib将文件添加到现有的.zip文件 - 问题是,zip文件大小为1GB。当我尝试添加1个小文件(400k)时,sharpziplib会在添加新文件之前创建orig zip文件的副本/ temp - 当可用磁盘空间量小于您尝试的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();

有更有效的方法吗?

谢谢: - )

2 个答案:

答案 0 :(得分:3)

找到答案:

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

  

您好,

     

如果您要创建新的Zip存档   可能更容易使用   而是ZipOutputStream类。

     

如果您正在更新,您可以获得   ZipFile类直接写入   如果你在磁盘上的现有存档   选择。 IArchiveStorage(图书馆   提供DiskArchiveStorage)   BeginUpdate时传递的键接口   叫做。它有一个UpdateMode   属性可以设置为安全或   直接。

     

其含义是显而易见的   希望。更新期间失败   可能会破坏档案丢失   数据

     

hth,-jr -

答案 1 :(得分:0)

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