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

我试图使用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(); 

有没有更有效的方法来做到这一点?

谢谢 :-)

找到答案:

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

嗨,

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

如果您要更新,可以让ZipFile类直接写入磁盘上的现有存档(如果您选择)。 IArchiveStorage(该库提供DiskArchiveStorage)是调用BeginUpdate时传递的关键接口。 它有一个UpdateMode属性,可以设置为Safe或Direct。

这种影响显而易见。 更新期间的失败可能会损坏存档丢失数据。

hth,-jr-

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