2010-08-12 18 views
5

Necesito una forma de escribir un GZipStream en una cadena.C# GZipStream to String

estoy usando:

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

He intentado varios métodos, pero no puedo entenderlo. ¿Alguien tiene alguna idea?

Muchas gracias, Brett

+0

posible duplicado de [¿Cómo se obtiene una cadena de un MemoryStream?] (Http://stackoverflow.com/questions/78181/how-do-you-get-a-string-from-a-memorystream) –

+0

Cuando uso: var sr = new StreamReader (ms); var myStr = sr.ReadToEnd(); la cadena vuelve vacía. ¿Me podría estar perdiendo algo al convertir un GZipStream a un MemoryStream? – Brett

+0

si su inFile es siempre un archivo de texto, entonces la solución/enlace sugerido por @Steven funcionará. Si los formatos son diferentes, entonces solo puede tener una representación bade64 de los datos. –

Respuesta

20

Usted tiene un descomprimir GZipStream, por lo que necesita para leer datos de él. La forma más fácil es envolver el GZipStream con un StreamReader que tiene un método ReadToEnd que devuelve una cadena.

Algo así como:

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

(using declaraciones asegurar que inFile está cerrada y se liberan todos los demás recursos.)

NB esto suponga que inFile contiene texto codificado UTF-8 o UTF -dieciséis. El contenido binario u otra codificación de texto podría causar problemas (puede anular la codificación con un constructor diferente StreamReader).

+0

¡Funcionó perfecto! ¡Gracias a todos! – Brett