要将文档保存到压缩文件中,您必须创建两个流:
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
在复制之前设置。