在C#中解压BIG .tar.gz的最快方法?

时间:2014-04-08 22:20:08

标签: c# gzip gzipstream

我有大量5GB的.tar.gz文件。我注意到.NET GZipStream实际上陷入无限循环试图解压缩它们。

我发现了一些纯C#代码,但这些都与我的文件大小有关。与其他海报(24GB tar.gz Decompress using sharpziplib)不同,我在X64位机器上将应用程序编译为64位.NET 4.5.1应用程序。

我注意到.NET 4.5.1删除了2GB的限制..但是在阅读之后发现它非常具有误导性,实际上它会删除对象的所有嵌套部分,但是不能使用超过2GB但是即使使用relevant option turned on

,对象(如字节数组)的实际可寻址范围仍显示为2GB

有没有人有任何解决方案或我在C#中遇到限制?我可以从我的应用程序调用64位7ZIP DLL或调用7ZIP .exe并等待它完成(比特的一个小屋),但必须有一个更清洁的方式?此外,我想要最快的解压缩,最好是纯C#代码,但我现在认为这在C#中是不可能的(由于字节数组的可寻址范围的限制)

1 个答案:

答案 0 :(得分:5)

您将无法将结果数据加载到C#中的单个byte[]中。您仍将受阵列大小的限制。

但是,您应该能够通过仅使用流并通过流解压缩来解压缩这些问题。我和DotNetZip以及大流一起运气很好 - 使用它,你应该可以做到:

using (System.IO.Stream input = System.IO.File.OpenRead(inputFile))
using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true))
using (var output = System.IO.File.Create(outputFile))
    decompressor.CopyTo(output);