Как сжать / распаковать строку с помощью SevenZip - 7Zip
Там очень плохая документация, поэтому я изо всех сил пытаюсь сделать это
Я добавил 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,
пакеты \SevenZipSharp.0.64\ Lib\SevenZipSharp.dll
1 ответ
Это неправильно:
System.Text.Encoding.UTF8.GetString(compressedData)
Encoding.UTF8.GetBytes(compressedText)
Сжатые данные не являются UTF-8. И вы не должны пытаться воспринимать это как текст. Всегда храните сжатые данные в двоичном виде, как byte[]
, Если вам необходимо передать его по текстовому каналу, например по электронной почте, используйте кодировку Base64.
Хотя в принципе измените свое мышление. Сжатие не является функцией string -> string
, Это byte[] -> byte[]
, Также допустимо считать это string -> byte[]
,