Чтобы сохранить документ в сжатом файле, вы должны создать два потока:
using (var fs = File.Create(fileName))
{
using (var gz = new GZipStream(fs, CompressionMode.Compress))
{
doc.Save(gz);
}
}
Это предполагает, что вы создали XmlDocument
. Затем он вызывает метод XmlDocument.Save(Stream).
Если вы хотите писать XML непосредственно в сжатый файл, вы можете написать:
using (var fs = File.Create(fileName))
{
using (var gz = new GZipStream(fs, CompressionMode.Compress))
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (var writer = XmlWriter.Create(gz, settings))
{
// write xml here
}
}
}
Вот так, что я хотел бы предложить, если вы просто хотите, чтобы написать GZIP сжатый файл XML.
Если вы действительно хотите сначала перейти к MemoryStream
, а затем в сжатый файл, вы создаете поток памяти, как вы показываете в своем вопросе, а затем вы пишете его вот так.
using (var fs = File.Create(fileName))
{
using (var gz = new GZipStream(fs, CompressionMode.Compress))
{
ms.CopyTo(gz);
}
}
Не забудьте установить ms.Position = 0
, прежде чем делать копию.
Возможно, вам стоит взглянуть на простое управление сжатием gzip на уровне сервера. Вы можете получить все gml-ответы gml, сжатые на уровне IIS. –