【问题标题】:DotNetZip unable to zip a huge number of entriesDotNetZip 无法压缩大量条目
【发布时间】:2013-12-17 12:16:21
【问题描述】:

我正在通过以下方式使用 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 支持的最大整数数量是多少?有解决办法吗? 提前非常感谢。

【问题讨论】:

    标签: c# .net compression zip dotnetzip


    【解决方案1】:

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

    myZipFile.UseZip64WhenSaving = Zip64Option.AsNecessary;
    

    【讨论】:

    • 我使用 zip64: zip.UseZip64WhenSaving = Zip64Option.Always;为了使用 zip64,还有什么需要添加的吗?
    • 看起来他们在 zip64 实现中存在一些错误:dotnetzip.codeplex.com/workitem/16401
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多