2010-06-07 77 views
2

我试图使用sharpziplib将文件添加到现有的.zip文件 - 问题是,zip文件的大小为1GB。当我尝试添加1个小文件(400k)时,sharpziplib会在添加新文件之前创建原始zip文件的副本/临时文件 - 当可用磁盘空间的量小于您尝试访问的zip文件的2倍时,这会造成问题更新。sharpziplib - 你可以在没有它的情况下添加一个文件首先复制整个zip文件吗?

例如: 1GB拉链myfile.zip 1GB拉链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(); 

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

感谢:-)

回答

3

找到了答案:

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

嗨,

如果要创建一个新的Zip压缩文件 是可能会更容易使用 ZipOutputStream类代替。

如果您正在更新,如果您选择 ,则可以直接将 ZipFile类写入磁盘上的 现有存档。 IArchiveStorage(提供DiskArchiveStorage的库 )是调用BeginUpdate 时所通过的密钥接口 。它有一个UpdateMode 属性,可以将其设置为安全或 Direct。

有希望的影响是显而易见的 。在更新 期间失败可能会损坏丢失 数据的档案。

心连心,-jr-

+0

将是很好的在这里引用的答案,以便更容易给别人看的。 – Davy8 2010-06-08 02:02:56

+0

好点的戴维,我添加了报价,谢谢。 – schmoopy 2010-06-21 15:22:02

0

如果要从头开始创建压缩文件,使用ZipOutputStream而不是ZipFile的。您可以在SharpZipLib sources中找到此示例。我不知道ZipOutputStream是否支持添加到现有的zip文件,所以如果这就是你在做什么,恐怕我没有一个有用的答案。

+0

是啊,我尝试添加到现有的zip文件:-( – schmoopy 2010-06-07 13:16:59

相关问题