我正在以下列方式使用dotnet zip:
using (ZipFile zip = new ZipFile(@"E:\test2.zip"))
{
zip.ParallelDeflateThreshold = -1;
zip.UseZip64WhenSaving = Zip64Option.Always;
zip.SaveProgress += SaveProgress;
zip.AddDirectory(@"E:\Samples");
zip.Save(@"E:\test2.zip");
}
此代码正常工作,直到我尝试压缩一个容纳近100万个文件的目录。
情景:
1。 如果文件很重:
该文件夹在分配的子目录中包含928614个文件,完整的文件夹大小为134GB,但大多数文件只有几kb,最大的文件大约是60mb。
应用程序在文件870000的保存操作期间卡住。我通过听取进度事件来了解这一点。
public void SaveProgress(object sender,SaveProgressEventArgs e) {
if (e.EntriesSaved != 0)
{
System.Console.WriteLine(e.EntriesSaved.ToString());
}
我让应用程序运行了一整晚,没有任何反应,在其中一次测试运行中,应用程序完全崩溃了(就像有人在视觉工作室按CTRL F5)
我还尝试运行dotnetzip工具包提供的ZipIt.exe,同样的事情发生了。
2.如果文件非常小(测试目的)
该软件包在分配的子目录中包含970000个文件,所有文件都是带字母“a”的txt文件,整个文件夹大小为1mb。
保存操作遍历所有文件(我可以使用saveProgress事件看到) 但最后我得到了一个 outofmemoryexception 。
我还尝试运行dotnetzip工具包提供的ZipIt.exe,在这种情况下操作成功完成(太混乱了!)
dotnetzip是否支持最大数量的entires?有工作吗? 非常感谢提前。
答案 0 :(得分:1)
原始ZIP规范允许zip存档中最多65535个条目。您应该为存档启用Zip64:
myZipFile.UseZip64WhenSaving = Zip64Option.AsNecessary;