DotNetZip无法压缩大量条目

4
我在以下方式中使用dotnet zip:

我正在使用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());
    }

我让应用程序运行了整整一晚,什么也没发生,在其中一个测试中,应用程序完全崩溃了(就像有人在Visual Studio中按下CTRL F5)。

我还尝试运行dotnetzip工具包提供的ZipIt.exe,结果出现了相同的问题。

2.如果文件非常小(仅为测试目的)

该软件包包含大量子目录中的970000个文件,所有文件都是一个带有字母“a”的txt文件,完整的文件夹大小为1mb。

保存操作遍历所有文件(使用saveProgress事件可以看到),但最终出现了outofmemoryexception异常。

我还尝试运行dotnetzip工具包提供的ZipIt.exe,在那种情况下,操作成功完成了(如此令人困惑!)

dotnetzip是否支持最大条目数?是否有解决方法?非常感谢您的帮助。

1个回答

4

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

myZipFile.UseZip64WhenSaving = Zip64Option.AsNecessary;

1
我使用Zip64:zip.UseZip64WhenSaving = Zip64Option.Always;还有什么其他的东西需要添加才能使用zip64吗? - user2878881
看起来他们在zip64实现中有一些bug:http://dotnetzip.codeplex.com/workitem/16401 - crea7or

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接