如何在C#中解压缩嵌套的GZip(TGZ)文件

时间:2009-11-18 13:09:07

标签: c# nested gzip gzipstream

我收到的TGZ文件包含一个纯文本文件以及一个或多个嵌套的TGZ文件。我已经想出如何解压缩主TGZ文件并读取其中包含的纯文本文件,但我无法弄清楚如何识别和解压缩嵌套的TGZ文件。有没有人遇到过这个问题?

另外,我无法控制我收到的文件,因此我无法更改包含嵌套TGZ文件的TGZ文件的格式。另一个警告(即使我认为不重要)是这些文件在Unix或Linux环境中被压缩和涂焦。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

尝试使用SharpZipLib(http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx)免费库。

它允许您使用TGZ并且具有在尝试对文件进行充气之前测试文件的方法;因此,您可以依赖文件扩展名是正确的,也可以单独测试它们以查看是否可以将它们作为压缩文件读取 - 然后在主文件解压缩后对它们进行充气。

答案 1 :(得分:4)

要从.NET读取和写入.tar和.tgz(或.tar.gz)文件,您可以使用这个单文件tar类:

http://cheesoexamples.codeplex.com/SourceControl/changeset/view/97756#1868643

非常简单的用法。要创建存档:

string[] filenames = { ... };
Ionic.Tar.CreateArchive("archive.tar", filenames);

创建压缩(gzip'd)tar存档:

string[] filenames = { ... };
Ionic.Tar.CreateArchive("archive.tgz", filenames, TarOptions.Compress);

阅读tar档案:

var entries = Ionic.Tar.List("archive.tar");  // also handles .tgz files

提取tar档案中的所有条目:

var entries = Ionic.Tar.Extract("archive.tar");  // also handles .tgz files

答案 2 :(得分:1)

在CodePlex上查看DotNetZip

  

“如果你想要的更好   DeflateStream或GZipStream类   替换内置的那个   .NET BCL,也就是这里。   DotNetZip的DeflateStream和   GZipStream有一个版本   独立程序集,基于.NET   Zlib港。这些流支持   压缩级别和提供很多   更好的内置性能   类。还有一个ZlibStream   完成集合(RFC 1950,1951,   1952年)。“

您似乎可以遍历压缩文件并将各个文件从存档中拉出来。然后,您可以测试未压缩的文件,看看它们中是否有自己的GZip文件。

这是来自Examples Page

的snippit
using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  foreach (ZipEntry e in zip)
  {
    e.Extract(OutputStream);
  }
}

基思