文档太差了,所以我很难运行这个
我添加了 dll 文件和正确的引用
最后它压缩字符串,但在解压缩时出现错误
你能告诉我错误在哪里吗?
public static string SevenZip_CompressString(string text)
{
byte[] compressedData = null;
SevenZipCompressor compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Ppmd;
compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
compressor.ScanOnlyWritable = true;
compressor.DefaultItemName = "T";
using (MemoryStream msin = new MemoryStream(Encoding.UTF8.GetBytes(text)))
{
using (MemoryStream msout = new MemoryStream())
{
compressor.CompressStream(msin, msout);
compressedData = msout.ToArray();
}
}
return System.Text.Encoding.UTF8.GetString(compressedData);
}
下面解压
public static string SevenZip_DE_CompressString(string compressedText)
{
byte[] uncompressedbuffer = null;
using (MemoryStream compressedbuffer = new MemoryStream(Encoding.UTF8.GetBytes(compressedText)))
{
using (SevenZipExtractor extractor = new SevenZipExtractor(compressedbuffer))
{
using (MemoryStream msout = new MemoryStream())
{
extractor.ExtractFile(0, msout);
uncompressedbuffer = msout.ToArray();
}
}
}
return Encoding.UTF8.GetString(uncompressedbuffer);
}
我收到错误消息
c#.net 4.5 WPF,
packages\SevenZipSharp.0.64\lib\SevenZipSharp.dll
这些都是错误的:
System.Text.Encoding.UTF8.GetString(compressedData)
Encoding.UTF8.GetBytes(compressedText)
压缩数据不是 UTF-8。 而且您不应该尝试将其视为文本。 始终以二进制形式存储压缩数据,如
byte[]
。 如果您需要通过纯文本渠道(例如电子邮件)传递它,请使用 Base64 编码。
从根本上来说,改变你的想法。 压缩不是函数
string -> string
。 是byte[] -> byte[]
。 将其视为 string -> byte[]
也是有效的。
使用这个存储库,它拥有您需要的一切: https://github.com/BrainSlugs83/StringExtensions
GZIP 不适合压缩文本,请使用 deflate 方法,检查该存储库。