我通过以下方式使用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");
}


直到我尝试压缩包含近一百万个文件的目录之前,此代码都可以正常工作。

场景:

1。
 如果文件太重:

该文件夹包含928614个子目录分配的文件,完整的文件夹大小为134GB,但大多数文件只有几kb,最大的文件约为60 mb。

应用程序在文件870000的保存操作期间被卡住。我通过侦听progress事件来知道这一点。

公共无效SaveProgress(对象发送者,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事件)
但最后我得到了内存不足的异常。

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

dotnetzip是否支持最大数量的整体?周围有工作吗?
非常感谢。

最佳答案

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

myZipFile.UseZip64WhenSaving = Zip64Option.AsNecessary;

09-11 19:20