如何使用 C# 解压缩 tar.z
How to unzip tar.z using C#
我试过DotNetZip、SharpZipLib甚至用cmd命令rar.exe
但它不起作用
代码是我参考ICSharpCode.SharpZipLib.GZip、ICSharpCode.SharpZipLib.Tar做的
FileInfo tarFileInfo = new FileInfo(@"D:\*.tar.Z");
using (Stream sourceStream = new GZipInputStream(tarFileInfo.OpenRead()))
{
using (TarArchive tarArchive = TarArchive.CreateInputTarArchive(sourceStream, TarBuffer.DefaultBlockFactor))
{
tarArchive.ExtractContents(targetDirectory.FullName);
}
}
我会得到这样的错误信息:
ICSharpCode.SharpZipLib.GZip.GZipException: 'Error GZIP header,
second magic byte doesn't match
那么如何修复它并成功解压?
.z
使用 LZW,这是一种与 .zip
或 .gz
文件中使用的算法完全不同的算法。 SharpZipLib 通过 ICSharpCode.SharpZipLib.Lzw
命名空间支持 LZW。用于每个算法的命名空间显示在存储库的登录页面的 Namespace Layout 部分。
您可以检查 the LZW unit test file,尽管代码与用于其他格式的代码基本相同,例如:
using (var inStream = new LzwInputStream(File.OpenRead(@"D:\*.tar.Z")))
{
using (TarArchive tarArchive = TarArchive.CreateInputTarArchive(inStream, TarBuffer.DefaultBlockFactor))
{
tarArchive.ExtractContents(targetDirectory.FullName);
}
}
根据Wikipedia,压缩文件可能使用 DEFLATE 而不是 LZW。在这种情况下,您必须使用 InflaterInputStream
而不是 LzwInputStream
.
SharpZipLib 的 repo 中的 TAR sample 使用基于开关的 InflaterInputStream、GZipInputStream 或 BZip2InputStream
我试过DotNetZip、SharpZipLib甚至用cmd命令rar.exe
但它不起作用
代码是我参考ICSharpCode.SharpZipLib.GZip、ICSharpCode.SharpZipLib.Tar做的
FileInfo tarFileInfo = new FileInfo(@"D:\*.tar.Z");
using (Stream sourceStream = new GZipInputStream(tarFileInfo.OpenRead()))
{
using (TarArchive tarArchive = TarArchive.CreateInputTarArchive(sourceStream, TarBuffer.DefaultBlockFactor))
{
tarArchive.ExtractContents(targetDirectory.FullName);
}
}
我会得到这样的错误信息:
ICSharpCode.SharpZipLib.GZip.GZipException: 'Error GZIP header, second magic byte doesn't match
那么如何修复它并成功解压?
.z
使用 LZW,这是一种与 .zip
或 .gz
文件中使用的算法完全不同的算法。 SharpZipLib 通过 ICSharpCode.SharpZipLib.Lzw
命名空间支持 LZW。用于每个算法的命名空间显示在存储库的登录页面的 Namespace Layout 部分。
您可以检查 the LZW unit test file,尽管代码与用于其他格式的代码基本相同,例如:
using (var inStream = new LzwInputStream(File.OpenRead(@"D:\*.tar.Z")))
{
using (TarArchive tarArchive = TarArchive.CreateInputTarArchive(inStream, TarBuffer.DefaultBlockFactor))
{
tarArchive.ExtractContents(targetDirectory.FullName);
}
}
根据Wikipedia,压缩文件可能使用 DEFLATE 而不是 LZW。在这种情况下,您必须使用 InflaterInputStream
而不是 LzwInputStream
.
SharpZipLib 的 repo 中的 TAR sample 使用基于开关的 InflaterInputStream、GZipInputStream 或 BZip2InputStream