2010-01-22 5 views
11

ho bisogno di zip e decomprimere stringala compressione e decompressione stringa con Sgonfiare

Ecco il codice:

public static byte[] ZipStr(String str) 
{ 
    using (MemoryStream output = new MemoryStream()) 
    using (DeflateStream gzip = new DeflateStream(output, CompressionMode.Compress)) 
    using (StreamWriter writer = new StreamWriter(gzip)) 
     { 
       writer.Write(str); 
       return output.ToArray(); 
     } 
} 

e

public static string UnZipStr(byte[] input) 
{ 
    using (MemoryStream inputStream = new MemoryStream(input)) 
    using (DeflateStream gzip = new DeflateStream(inputStream, CompressionMode.Decompress)) 
    using (StreamReader reader = new StreamReader(gzip)) 
     { 
     reader.ReadToEnd(); 
     return System.Text.Encoding.UTF8.GetString(inputStream.ToArray()); 
     } 
} 

Sembra che ci sia un errore di metodo UnZipStr. Qualcuno può aiutarmi?

+4

State ottenendo un errore di compilazione, o un'eccezione, o cosa? Potete fornire maggiori dettagli sull'errore, per favore? – Nick

risposta

24

ci sono due problemi distinti. Prima di tutto, in ZipStr è necessario irrigare o chiudere la StreamWriter e chiudere il DeflateStream prima di leggere dal MemoryStream.

In secondo luogo, in UnZipStr, si sta costruendo la stringa dei risultati dai byte compressi in inputStream. Dovresti restituire invece il risultato di reader.ReadToEnd().

Sarebbe anche una buona idea specificare la codifica delle stringhe nei costruttori StreamWriter e StreamReader.

provare il seguente codice invece:

public static byte[] ZipStr(String str) 
{ 
    using (MemoryStream output = new MemoryStream()) 
    { 
     using (DeflateStream gzip = 
      new DeflateStream(output, CompressionMode.Compress)) 
     { 
      using (StreamWriter writer = 
       new StreamWriter(gzip, System.Text.Encoding.UTF8)) 
      { 
       writer.Write(str);   
      } 
     } 

     return output.ToArray(); 
    } 
} 

public static string UnZipStr(byte[] input) 
{ 
    using (MemoryStream inputStream = new MemoryStream(input)) 
    { 
     using (DeflateStream gzip = 
      new DeflateStream(inputStream, CompressionMode.Decompress)) 
     { 
      using (StreamReader reader = 
       new StreamReader(gzip, System.Text.Encoding.UTF8)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 
} 
+0

@Mikhail Si è verificato un problema con 'ZipStr'. Ho aggiornato la mia risposta. –

+0

@PhilRoss Grazie mille, ma ho una domanda. Come fare questo multithread? Usando TPL? – IamStalker