【发布时间】:2018-04-26 20:21:40
【问题描述】:
我已经下载了 SharpCompress 源代码并创建了一个简单的控制台应用程序来解压缩一个小的 .xz 文件。在github站点上的几个不同示例和stackoverflow上的其他示例之后,我找不到任何真正适用于“解压缩” .xz 文件的组合,也找不到任何说明或文档。有没有人真正能够使用 SharpCompress“解压缩”一个 .xz 文件?
using (Stream stream = File.OpenRead(@"C:\temp\ot.xz"))
{
using (var reader = ReaderFactory.Open(stream))
{
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
{
Console.WriteLine(reader.Entry.Key);
reader.WriteEntryToDirectory(@"C:\temp", new ExtractionOptions()
{
ExtractFullPath = true,
Overwrite = true
});
}
}
}
}
此特定代码引发异常“无法确定压缩流类型。支持的阅读器格式:Zip、GZip、BZip2、Tar、Rar、LZip、XZ'
以下代码效果更好(不会引发错误),但 Entry.Key 值是意外或乱码。
using (Stream stream = File.OpenRead(@"C:\temp\ot.xz"))
{
var xzStream = new XZStream(stream);
using (var reader = TarReader.Open(xzStream))// ReaderFactory.Open(stream))
{
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
{
Console.WriteLine(reader.Entry.Key);
}
}
}
}
【问题讨论】:
-
您确定这是一个有效的 .XZ 文件吗?我建议在十六进制编辑器中打开它并检查魔法(前六个字节),它应该是 FD 37 7A 58 5A 00。tukaani.org/xz/xz-file-format-1.0.4.txt
-
是的。我已经做到了,它确实与神奇的前六个字节相匹配。我什至使用了sharpcompress XZStream.IsXZStream(stream) 来检查它,它返回true。
-
我能够使用自己的 .XZ 文件重现此问题。 .XZ 支持似乎不完整,并且 ReaderFactory 非常损坏。我找到了对这个 repo 的引用:github.com/sambott/XZ.NET。使用该库,我可以解压缩我的文件。也许这对你有用。
-
有趣。我克隆了 XZ.NET 存储库,看起来它引用了 SharpCompress 作为依赖项。不确定这个特定的“包装器”在做什么或如何使用它。如果它对你有用,你介意分享你用来解压你的 xz 文件的代码吗?
标签: c# .net xz sharpcompress