2014-09-14 5 views
0

Существует так плохая документация поэтому я изо всех сил, чтобы сделать этот рывокКак сжать/распаковать строку с помощью SevenZip - 7Zip

Я добавил DLL файлы и соответствующие ссылки

Наконец он сжимает строку, но дает ошибку, когда i de-compress

Можете ли вы сказать мне, где ошибка?

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

enter image description here

+0

Вы проверили InnerException из View Details ... ссылку внизу в окне Exception, которое вы опубликовали? –

+0

Я не знаю, почему, но я был очень уверен, что вы собираетесь задать этот вопрос после предыдущего о сжатии DB ...... –

+0

@SivaGopal внутреннее исключение - это null – MonsterMMORPG

ответ

1

Это неправильно:

System.Text.Encoding.UTF8.GetString(compressedData) 
Encoding.UTF8.GetBytes(compressedText) 

Сжатый данные не UTF-8. И вы не должны пытаться рассматривать его как текст. Всегда сохраняйте сжатые данные в двоичном формате, как byte[]. Если вам необходимо передать его через текстовый канал, например, по электронной почте, используйте кодировку Base64.

В принципе, измените свое мышление. Сжатие не является функцией string -> string. Это byte[] -> byte[]. Также считается, что это string -> byte[].

+0

ОК, так как я могу исправить? ty для ответа – MonsterMMORPG

+0

Я сказал - сохраните сжатые данные как 'byte []'. –

+0

да, как вы можете сохранить его на сервере SQL :), но я решил проблему из того, что вы сказали. – MonsterMMORPG

Смежные вопросы