【发布时间】:2012-04-24 06:57:45
【问题描述】:
DotNetZip 有一个奇怪的问题,我似乎找不到解决方案。 我已经搜索了几个小时,但我找不到任何关于此的内容,所以就这样吧。
var ms = new MemoryStream();
using (var archive = new Ionic.Zip.ZipFile()) {
foreach (var file in files) {
// string byte[]
var entry = archive.AddEntry(file.Name, file.Data);
entry.ModifiedTime = DateTime.Now.AddYears(10); // Just for testing
}
archive.Save(ms);
}
return ms.GetBuffer();
我需要添加修改时间,这很关键,但现在我只有一个虚拟时间戳。
当我用 WinRAR 打开文件时,它显示“存档意外结束”。每个单独的文件都有校验和 00000000,WinRAR 显示“存档格式未知或已损坏”。我可以修理它,这使它的尺寸缩小了 20%,一切正常。但这并不是真的有用..
当我在添加所有条目后创建断点时,我可以在zip.Entries 中看到所有条目都具有相同的错误 CRC,但所有数据似乎都在那里。
所以问题不应该是我保存存档的方式。
我在其他地方使用我的文件集合没有问题,这增加了 DotNetZip 的奇怪之处。好吧,或者我误解了一些东西:)
【问题讨论】:
-
GetBuffer肯定是错误的,因为缓冲区通常大于内容。使用ToArray()。或者小心处理消费代码中未完全填充的缓冲区。 -
我很高兴我们解决了这个问题。它实际上解决了这个问题。您可以将该评论添加为答案,以便我可以接受它吗?