c# - 使用 MemoryStream 写出到 XML

标签 c# xml memorystream

我注意到将数据写入 XML 文件的两种不同方法(为简洁起见省略了错误处理)。

第一种方法是构建 XML 文档,然后将 XML 简单地保存到一个文件中:

using (XmlWriter writer = XmlWriter.Create(fileName))
{
    writer.WriteStartDocument(true);
    writer.WriteStartElement("parentelement");
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

第二种方法是创建一个 MemoryStream,然后将 MemoryStream 保存到一个文件中:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(ms, settings))
{
    writer.WriteStartDocument(true);
    writer.WriteStartElement("parentelement");
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

using (FileStream fs = File.Open(fileName, FileMode.Create, FileAccess.Write))
{
    ms.WriteTo(fs);
    ms.Dispose();
}

我猜测使用 MemoryStream 的逻辑是确保在尝试保存文件之前可以构建 XML 文件。在向 XML 文件中添加条目时,MemoryStream 方法是否会提供原子写入事件和/或防止写入问题?

任何人都可以解释这是否真的有必要,或者只是向我的项目添加不必要的代码行的一种矫枉过正的方法?

最佳答案

MemoryStream 版本在这种情况下很浪费。 MemoryStream 如果您想执行类似于 Stream 的工作,但不想要实际文件,则很有用。如果您正在写一个文件,那么只需写入该文件即可。这避免了在内存中缓冲所有数据的需要。

关于c# - 使用 MemoryStream 写出到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/486843/

相关文章:

java - 添加外部 JAR 文件后重建时 Eclipse 挂起

xml - 如何更改 Android Lollipop Overview/Recents/Multitasking textColor

c# - 将 IntPtr 指向的内存内容发送到 C# 上的 MemoryStream 变量

c# - 将 C# 解决方案结构转储到文本文件

c# - 我可以使用 SafeHandle 而不是 IntPtr 吗?

javascript - 在WebView UWP中通过ID获取dom元素

c# - 外汇警察: "Types that own disposable fields should be disposable"

xml - 我将如何解析 R 中的 XML 文件并对数据进行基本统计分析

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

c# - 为什么我的文件在上传并转换为字节数组后大小不同?