【问题标题】:SharpZipLib: Decompress .gz from inside .tar file?SharpZipLib:从 .tar 文件中解压缩 .gz?
【发布时间】:2011-04-18 00:38:18
【问题描述】:

我有一个 .tar 文件,其中包含多个压缩的 .gz 文件。遍历 .tar 文件在目标目录中创建每个 .gz 文件时我没有问题。我想跳过一起写.gz,只是从 TarEntry/TarArchive 中解压缩它?并通过 .Net 原生 GZipStream 即时写入其内容。甚至不确定这是否可能。

这是我当前的代码,用于写出每个 g'zip 文件。不确定要修改什么才能到达我需要的位置。

        using (FileStream _fsIn = new FileStream(@"F:\data\abc.tar", FileMode.Open, FileAccess.Read))
        {
            using (TarInputStream _tarIn = new TarInputStream(_fsIn))
            {
                TarEntry _tarEntry;

                while ((_tarEntry = _tarIn.GetNextEntry()) != null)
                {
                    string _archiveName = _tarEntry.Name;

                    using (FileStream _outStr = new FileStream(@"F:\data\" + _archiveName, FileMode.Create))
                    {
                        _tarIn.CopyEntryContents(_outStr);
                    }
                }
            }
        }

【问题讨论】:

  • 让我补充一下... abc.tar 中包含的 gz 文件大小为 1-5GB。

标签: c# tar sharpziplib compression gzip


【解决方案1】:

我不确定你想做什么。也许你可以明确你的目标。 sharpzlib 的文档没有我预期的那么好。

我已经遍历了一个 tar 存档并将文件的内容推送到一个新的 Stream 中,也许您可​​以以此为起点。看看this * Article

【讨论】:

  • 让我试着重新解释一下这个场景。我有一个 tar 文件:abc.tar。它包含多个 gzip 压缩文件:1.gz、2.gz、3.gz 等。我通过 abc.tar 交互并写出其中包含的所有 gz 文件没有问题。我想放弃编写 gz 文件并在循环 abc.tar 时解压缩它。
  • 我将从您提供的文章中尝试以下代码。由于淫秽的 gz 文件大小,这可能不合适。 MemoryStream out_stream = new MemoryStream(); tar.CopyEntryContents(out_stream);