4

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

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

提前感谢您的帮助。

4

3 回答 3

5

试试 SharpZipLib ( http://www.icharpcode.net/OpenSource/SharpZipLib/Download.aspx ) 免费库。

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

于 2009-11-18T14:03:50.123 回答
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
于 2010-04-06T20:54:13.940 回答
1

看看CodePlex 上的DotNetZip

“如果您只想要一个更好的 DeflateStream 或 GZipStream 类来替换 .NET BCL 中内置的类,那么这里也是如此。DotNetZip 的 DeflateStream 和 GZipStream 可在独立程序集中使用,基于 .NET 端口Zlib。这些流支持压缩级别并提供比内置类更好的性能。还有一个 ZlibStream 来完成集合(RFC 1950、1951、1952)。

看来您可以遍历压缩文件并将单个文件拉出存档。然后,您可以测试您解压缩的文件,看看它们是否本身就是 GZip 文件。

这是他们的示例页面的片段

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

基思

于 2009-11-18T19:19:06.850 回答