2010-08-12 5 views
5

J'ai besoin d'un moyen d'écrire un GZipStream dans une chaîne.C# GZipStream to String

J'utilise:

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

J'ai essayé plusieurs méthodes, mais ne peut pas comprendre. Est-ce que quelqu'un a des idées?

Un grand merci, Brett

+0

duplication possible de [Comment obtenez-vous une chaîne à partir d'un MemoryStream?] (Http://stackoverflow.com/questions/78181/how-do-you-get-a-string-from-a-memorystream) –

+0

Quand j'utilise: var sr = new StreamReader (ms); var myStr = sr.ReadToEnd(); la chaîne revient vide. Puis-je manquer quelque chose lors de la conversion d'un GZipStream en MemoryStream? – Brett

+0

Si votre fichier inFile est toujours un fichier texte, alors la solution/le lien suggéré par @Steven fonctionnera. Si les formats sont différents, vous ne pouvez avoir qu'une représentation bade64 des données. –

Répondre

20

Vous avez un GZipStream décompresser, vous devez donc lire les données. Le plus simple est d'envelopper le GZipStream avec un StreamReader qui a une méthode ReadToEnd retournant une chaîne.

Quelque chose comme:

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

(using déclarations veillent à ce que inFile est fermé et toutes les autres ressources sont libérées.)

NB cela ne suppose que inFile contient du texte UTF-8 ou UTF -16. Le contenu binaire ou tout autre codage de texte peut causer des problèmes (vous pouvez remplacer le codage avec un constructeur différent de StreamReader).

+0

A travaillé parfait! Merci tout le monde! – Brett