【问题标题】:Decompressing Large Gzip File not working using System.IO.Compression使用 System.IO.Compression 解压缩大型 Gzip 文件不起作用
【发布时间】:2016-06-09 13:21:56
【问题描述】:

我有一个 3.2GB 的 gzip 文件需要解压缩,但使用我的代码的输出只生成一个 64KB 的文件,这是不正确的。

using (FileStream originalFileStream = fileToDecompress.OpenRead())
{
    string currentFileName = fileToDecompress.FullName;
    string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);

    using (FileStream decompressedFileStream = File.Create(newFileName))
    {
        using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
        {
            decompressionStream.CopyTo(decompressedFileStream);
            Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
        }
    }
}

我正在使用 .NET 4.5 和我理解的 CopyTo 方法应该适用于大于 4GB 的文件,但没有运气。任何帮助将不胜感激。

【问题讨论】:

  • 您的原始 GZip 文件是如何创建的?
  • 未知,很可能在 linux 中使用 gzip 命令。我知道它是一个有效的文件,因为 7zip 能够解压缩它没有问题,但 C# 实现不是这样。

标签: c# .net compression


【解决方案1】:

我强烈建议您使用DotNetZip's 接口来连接 zlib,而不是 NET 4.5(或 NET 任何版本)。 NET 4.5 在该界面中存在错误,Microsoft 已声明他们 won't fix (!)。

【讨论】:

    【解决方案2】:

    我找到了一个解决方案,但它涉及对 .NET 的开源解压缩项目进行一些代码更改。本质上,当您有多个 gzip 流并且它们的文件太大时,问题就会出现。在代码内部,使用的是 int 而不是 long,这导致了我遇到的行为。修改代码后,它按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2017-03-20
      • 2018-04-19
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多