我最近有点问题。我一直在尝试将一个 zip 文件提取到内存流中,然后从该流中,使用该updateEntry()
方法将其添加到目标 zip 文件中。
问题是,当将流中的文件放入目标 zip 中时,如果文件尚未在 zip 中,则它可以工作。如果存在同名文件,则无法正确覆盖。它在 dotnetzip 文档上说,此方法将覆盖 zip 中存在的同名文件,但它似乎不起作用。它会正确写入,但是当我去检查 zip 时,应该被覆盖的文件的压缩字节大小为 0,这意味着出现问题。
我在下面附上我的代码,向您展示我在做什么:
ZipFile zipnew = new ZipFile(forgeFile);
ZipFile zipold = new ZipFile(zFile);
using(zipnew) {
foreach(ZipEntry zenew in zipnew) {
percent = (current / zipnew.Count) * 100;
string flna = zenew.FileName;
var fstream = new MemoryStream();
zenew.Extract(fstream);
fstream.Seek(0, SeekOrigin.Begin);
using(zipold) {
var zn = zipold.UpdateEntry(flna, fstream);
zipold.Save();
fstream.Dispose();
}
current++;
}
zipnew.Dispose();
}