DotNetZip无法压缩大量条目

时间:2013-12-17 12:16:22

标签: c# .net compression zip dotnetzip

我正在以下列方式使用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?有工作吗? 非常感谢提前。

1 个答案:

答案 0 :(得分:1)

原始ZIP规范允许zip存档中最多65535个条目。您应该为存档启用Zip64:

myZipFile.UseZip64WhenSaving = Zip64Option.AsNecessary;