如何使用 sharpcompress 解压缩 .xz (lzma2) 文件
How to unpack a .xz (lzma2) file using sharpcompress
我已经下载了 SharpCompress 源代码并创建了一个简单的控制台应用程序来解压缩一个小的 .xz 文件。根据 github 站点上的几个不同示例和 Whosebug 上的其他示例,我找不到任何实际适用于 "unzipping" .xz 文件的组合,也找不到任何说明或文档。有没有人真正能够使用 SharpCompress "unzip" .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
});
}
}
}
}
此特定代码引发异常 'Cannot determine compressed stream type. Supported Reader Formats: 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);
}
}
}
}
事实证明,SharpCompress 和 XZ.NET 都可以使用相同的简单客户端代码工作。
但是请注意,我测试的其中一个文件导致 XZ.NET 在尝试读取流结束时抛出异常,如下面的两个示例所示。 SharpCompress 正确处理了这两个文件。
using (Stream xz = new XZStream(File.OpenRead(@"\temp\server.crt.xz")))
using (Stream stream = new MemoryStream())
{
xz.CopyTo(stream);
}
或者,对于压缩纯文本:
using (Stream xz = new XZStream(File.OpenRead(@"\temp\server.crt.xz")))
using (TextReader reader = new StreamReader(xz))
{
Debug.WriteLine(reader.ReadToEnd());
}
我已经下载了 SharpCompress 源代码并创建了一个简单的控制台应用程序来解压缩一个小的 .xz 文件。根据 github 站点上的几个不同示例和 Whosebug 上的其他示例,我找不到任何实际适用于 "unzipping" .xz 文件的组合,也找不到任何说明或文档。有没有人真正能够使用 SharpCompress "unzip" .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
});
}
}
}
}
此特定代码引发异常 'Cannot determine compressed stream type. Supported Reader Formats: 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);
}
}
}
}
事实证明,SharpCompress 和 XZ.NET 都可以使用相同的简单客户端代码工作。
但是请注意,我测试的其中一个文件导致 XZ.NET 在尝试读取流结束时抛出异常,如下面的两个示例所示。 SharpCompress 正确处理了这两个文件。
using (Stream xz = new XZStream(File.OpenRead(@"\temp\server.crt.xz")))
using (Stream stream = new MemoryStream())
{
xz.CopyTo(stream);
}
或者,对于压缩纯文本:
using (Stream xz = new XZStream(File.OpenRead(@"\temp\server.crt.xz")))
using (TextReader reader = new StreamReader(xz))
{
Debug.WriteLine(reader.ReadToEnd());
}