2010-08-12 6 views
5

Ich brauche eine Möglichkeit, einen GZipStream in eine Zeichenfolge zu schreiben.C# GZipStream zu String

Ich verwende:

GZipStream Decompress = new GZipStream(inFile, CompressionMode.Decompress) 

Ich habe verschiedene Methoden ausprobiert, aber kann es nicht herausgefunden. Hat jemand irgendwelche Ideen?

Vielen Dank, Brett

+0

möglich Duplikat von [Wie erhalten Sie eine Zeichenfolge aus einem MemoryStream?] (Http://stackoverflow.com/questions/78181/how-do-you-get-a-string-from-a-memorystream) –

+0

Wenn ich folgendes benutze: var sr = new StreamReader (ms); var myStr = sr.ReadToEnd(); der String kommt leer zurück. Könnte mir etwas beim Konvertieren eines GZipStream in einen MemoryStream fehlen? – Brett

+0

Wenn Ihr inFile immer eine Textdatei ist, funktioniert die von @Steven vorgeschlagene Lösung/Verbindung. Wenn die Formate unterschiedlich sind, können Sie nur eine Bade64-Darstellung der Daten haben. –

Antwort

20

Sie haben ein Dekomprimieren GZipStream, so müssen Sie Daten von ihm lesen. Der einfachste Weg ist, die GZipStream mit einer StreamReader zu umhüllen, die eine ReadToEnd Methode hat, die eine Zeichenkette zurückgibt.

Etwas wie:

string res; 
using (var decompress = new GZipStream(inFile, CompressionMode.Decompress)) 
using (var sr = new StreamReader(decompress)) { 
    res = sr.ReadToEnd(); 
} 

(using Aussagen sicherzustellen, dass inFile geschlossen ist und alle anderen Ressourcen freigegeben werden.)

NB dies nicht davon ausgehen, dass inFile enthält Text codierte UTF-8 oder UTF -16. Binärer Inhalt oder andere Textcodierung könnte Probleme verursachen (Sie können die Codierung mit einem anderen StreamReader-Konstruktor überschreiben).

+0

Arbeitete perfekt! Danke allen! – Brett