2010-01-22 11 views
11

Ich brauche Stringzip und entpacken String mit Deflate

Hier Code ist zip und entpacken:

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(); 
     } 
} 

und

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()); 
     } 
} 

Es scheint, dass es Fehler in UnZipStr Methode. Kann mir jemand helfen?

+4

Sie einen Compiler-Fehler bekommen, oder eine Ausnahme, oder was? Kannst du bitte mehr Details zum "Fehler" angeben? – Nick

Antwort

24

Es gibt zwei separate Probleme. Zuerst, in ZipStr müssen Sie die StreamWriter spülen oder schließen und die DeflateStream vor dem Lesen von MemoryStream schließen.

Zweitens, in UnZipStr, konstruieren Sie Ihre Ergebniszeichenfolge aus den komprimierten Bytes in inputStream. Sie sollten stattdessen das Ergebnis reader.ReadToEnd() zurückgeben.

Es wäre auch eine gute Idee, die String-Codierung in den StreamWriter und StreamReader Konstruktoren anzugeben. Statt

den folgenden Code Versuchen:

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 Es gab auch ein Problem mit 'ZipStr'. Ich habe meine Antwort aktualisiert. –

+0

@PhilRoss Vielen Dank, aber ich habe eine Frage. Wie macht man das Multithread? Verwenden von TPL? – IamStalker