c# - 使用 XmlWriter 和 GZipStream 从 MemoryStream 写入 gzip 文件

标签 c# memorystream gzipstream

我正在尝试编写从 MemoryStream 生成压缩 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

关于c# - 使用 XmlWriter 和 GZipStream 从 MemoryStream 写入 gzip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17755533/

相关文章:

c# - 有没有办法知道 byte[] 是否已被 gzipstream 压缩?

c# - WebAPI 使用用户名和密码对 Azure AD 进行非交互式身份验证

database - 内部排序,使用两个堆解释的锦标赛排序算法

c# - 如何使用一个StreamWriter写入多个底层流?

c# - Memorystream.Read() 总是返回 0 bytesRead 和空 byte[]

c# - BinaryFormatter 与 MemoryStream 问题

c# - GZipStream解压性能差

c# - 如何使黑色变成透明颜色?

c# - Gridview EmptyDataText ="No data"- 如何向文本 'No data' 添加样式

c# - 根据 IP 将用户重定向到子域