Hek*_*eki 4 c# zip checksum dotnetzip
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();
Run Code Online (Sandbox Code Playgroud)
我需要添加修改时间,这是非常关键的,但是现在我只有一个虚拟时间戳.
当我用WinRAR打开文件时,它会显示"意外的归档结束".每个单独的文件都有校验和00000000,WinRAR说"存档格式未知或已损坏".我可以修理它,它可以减少20%的尺寸并使一切正常.但这并不是真的有用..
当我在添加所有条目后创建断点时,我可以看到zip.Entries所有条目都具有相同的错误CRC,但所有数据似乎都存在.所以它不应该是我保存存档的问题.
我在其他地方使用我的文件集没有问题,这增加了DotNetZip很奇怪.好吧,或者我误解了一些东西:)
GetBuffer肯定是错的.它返回的内部缓冲区,MemoryStream通常大于实际内容.
要返回仅包含实际内容的数组,请使用ToArray().
或者您可以在消费代码中仔细处理未完全填充的缓冲区.这会降低GC压力,因为您不需要为返回值分配一个全新的数组.
如果zip-archive很大,我还会考虑直接保存到文件,而不是在内存中组装存档.
| 归档时间: |
|
| 查看次数: |
3715 次 |
| 最近记录: |