【发布时间】:2015-07-08 10:00:34
【问题描述】:
我有这个代码,其中zipfilename 是现有的 Zip 文件,sourceFile 是我要压缩的文件,filename 是存档条目名称。
using (ZipArchive archive = ZipFile.Open(zipfilename, ZipArchiveMode.Update))
{
await Task.Run(() => archive.CreateEntryFromFile(sourceFile, filename, CompressionLevel.Fastest));
}
这适用于不超过 50KB 的小文件。对于这些,将文件压缩到存档中没有问题。我可以通过这种方式添加任意数量的小文件。
但是对于大小为 1.8GB 的非常大的文件,内存消耗会高达数 GB,并且文件从未真正压缩到存档中。
如何更好地将大文件压缩到现有的目标存档中?请注意,我需要使用现有的目标 zip/存档文件,并且它必须是 .zip。
【问题讨论】:
-
你使用什么压缩库?
-
我正在使用 System.IO.Compression。我知道一些 Nuget 包,但读到大文件存在稳定性问题..
-
我不确定,但 system.Io.compression 可能不支持 zip64 格式,它打破了 32 位指针的最大可寻址大小的限制(即 uint 4GB,int 2GB)。但是,它没有解释为什么 1.8 GB 的文件不会压缩。
-
Nuget 上提供的 SharpZipLib 确实比 System.IO.Compression 更好地处理大文件。
-
好的,现在有了 SharpZipLib,我要绕圈子了。我最初可以更好地处理压缩大文件,但我似乎无法让它将文件添加到可能以小文件开始的现有存档中。发生的情况是小文件被存档中的大文件覆盖。我应该发布一个新问题吗?或者我应该用示例代码更新这个问题..
标签: c# zipfile ziparchive