我收到的TGZ文件包含一个纯文本文件以及一个或多个嵌套的TGZ文件。我已经想出如何解压缩主TGZ文件并读取其中包含的纯文本文件,但我无法弄清楚如何识别和解压缩嵌套的TGZ文件。有没有人遇到过这个问题?
另外,我无法控制我收到的文件,因此我无法更改包含嵌套TGZ文件的TGZ文件的格式。另一个警告(即使我认为不重要)是这些文件在Unix或Linux环境中被压缩和涂焦。
提前感谢您的帮助。
答案 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
的snippitusing (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
foreach (ZipEntry e in zip)
{
e.Extract(OutputStream);
}
}
基思