使用XmlWriter和GZipStream从MemoryStream写入gzip文件
本文关键字:写入 gzip 文件 MemoryStream XmlWriter GZipStream 使用 | 更新日期: 2023-09-27 18:24:10
我正在字符串中从MemoryStream
编写并生成一个gzipped XML文件。这是我到目前为止所拥有的
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(ms, settings))
{
// CREATE XML
}
然后我想获取该流,并将其保存到压缩文件中。我见过很多使用GZipStream的例子,但没有一个能与之完全匹配。
要将文档保存到压缩文件中,必须创建两个流:
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
。
首先将其保存到文件中
XmlDocument doc = new XmlDocument();
doc.Save(writer);
然后使用zip方法对其进行压缩
byte[] b;
using (FileStream f = new FileStream("filename", FileMode.Open))
{
b = new byte[f.Length];
f.Read(b, 0, (int)f.Length);
}
using (FileStream f2 = new FileStream(fileName, FileMode.Create))
using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false))
{
gz.Write(b, 0, b.Length);
}