我在以下方式中使用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是否支持最大条目数?是否有解决方法?非常感谢您的帮助。