[英]Decompress Stream to String using SevenZipSharp
我想使用SevenZipSharp压缩字符串,并使用以下代码将C#控制台应用程序(我是C#的新手)拼凑在一起(其中的某些点来自于SO上类似的问题)。
压缩部分似乎可以正常工作(尽管我传递的是文件而不是字符串),压缩后的字符串向控制台的输出看起来像乱码,但我卡在了解压中……
我正在尝试做与这里相同的事情(我认为) :
感谢任何帮助,理想情况下控制台将显示压缩字符串,然后显示解压缩字符串。
谢谢 :)
using System;
using System.IO;
using SevenZip;
namespace _7ZipWrapper
{
public class Program
{
public static void Main()
{
SevenZipCompressor.SetLibraryPath(@"C:\Temp\7za64.dll");
SevenZipCompressor compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Ppmd;
compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
compressor.ScanOnlyWritable = true;
var compStream = new MemoryStream();
var decompStream = new MemoryStream();
compressor.CompressFiles(compStream, @"C:\Temp\a.txt");
StreamReader readerC = new StreamReader(compStream);
Console.WriteLine(readerC.ReadToEnd());
Console.ReadKey();
// works up to here... below here output to consol is: ""
SevenZipExtractor extractor = new SevenZip.SevenZipExtractor(compStream);
extractor.ExtractFile(0, decompStream);
StreamReader readerD = new StreamReader(decompStream);
Console.WriteLine(readerD.ReadToEnd());
Console.ReadKey();
}
}
}
压缩的结果是二进制数据-它不是字符串。 如果您尝试将其读取为字符串,则只会看到垃圾。 这是预料之中的-您不应该将其视为字符串。
下一个问题是,您尝试从compStream
读取两次,而不先“倒回”它。 您从流的末尾开始,这意味着没有数据可解压缩。 如果您仅添加:
compStream.Position = 0;
在创建提取器之前,您可能会发现它可以立即工作。 您可能还需要在读取decompStream
之前倒带。 因此,您将拥有如下代码:
// Rewind to the start of the stream before decompressing
compStream.Position = 0;
SevenZipExtractor extractor = new SevenZip.SevenZipExtractor(compStream);
extractor.ExtractFile(0, decompStream);
// Rewind to the start of the decompressed stream before reading
decompStream.Position = 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.