записать сжатые данные xml в поток памяти, используя gzipstream

Я пытаюсь записать сжатые данные xml в поток памяти. Вот мой код приложения тестовой консоли:

var ms = new MemoryStream();
var gstream = new GZipStream(ms, CompressionMode.Compress);

var settings = new XmlWriterSettings();
settings.Indent = true;

var writer = XmlWriter.Create(gstream, settings);
writer.WriteStartElement("x", "root", "123");
writer.WriteStartElement("item");
writer.WriteAttributeString("xmlns", "x", null, "abc");
writer.WriteEndElement();
writer.WriteEndElement();            

Console.WriteLine("Data length: " + ms.ToArray().Length);

writer.Close();
gstream.Close();
ms.Close();    

Console.ReadLine();

И вывод:

Data length: 0

Что я делаю не так? Спасибо.


person user3447070    schedule 28.05.2014    source источник


Ответы (1)


Вы должны закрыть модуль записи, чтобы сбросить поток. Просто измените код на:

writer.Close();
gstream.Close();
ms.Close();   

Console.WriteLine("Data length: " + ms.ToArray().Length);

и это должно работать.

person matiash    schedule 28.05.2014