2010-08-12 25 views
5

Bir dizeye GZipStream yazmanın bir yoluna ihtiyacım var.C# GZipStream to String

kullanıyorum:

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

Ben çeşitli yöntemler denedi, ancak bunu anlamaya olamaz. Herhangi bir fikri olan var mı?

Çok teşekkürler, Brett

+0

olası bir kopyası [MemoryStream'den bir ip nasıl alınır?] (Http://stackoverflow.com/questions/78181/how-do-you-get-a-string-from-a-memorystream) –

+0

Kullandığımda: var sr = new StreamReader (ms); var myStr = sr.ReadToEnd(); dizesi boş çıkıyor. Bir GZipStream'i bir MemoryStream'e dönüştürmede bir şey eksik olabilir miyim? – Brett

+0

, inFile dosyanız her zaman bir metin dosyasıysa, @Steven tarafından önerilen çözüm/link çalışır. Bu biçimler farklıdır, o zaman verilerin sadece bir bade64 temsiline sahip olabilirsiniz. –

cevap

20

Bir açılırken GZipStream var, yani bunu veri okumak gerekiyor. En kolay yol, GZipStream'u bir dize döndüren ReadToEnd yöntemine sahip StreamReader ile sarmaktır.

şey gibi:

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

(using ifadeleri inFile kapalıdır ve diğer kaynakları serbest olduğundan emin olun.)

NB bu inFile metin UTF-8 veya UTF kodlanmış içeren varsayalım yok -16. İkili içerik veya diğer metin kodlaması sorunlara neden olabilir (farklı bir StreamReader yapıcı ile kodlamayı geçersiz kılabilirsiniz).

+0

Mükemmel çalıştı! Herkese teşekkürler! – Brett