相关疑难解决方法(0)

使用MemoryStream写出XML

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

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

using (XmlWriter writer = XmlWriter.Create(fileName))
{
    writer.WriteStartDocument(true);
    writer.WriteStartElement("parentelement");
    writer.WriteEndElement();
    writer.WriteEndDocument();
}
Run Code Online (Sandbox Code Playgroud)

第二种方法是创建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();
}
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以解释这是否真的有必要或只是一种过度杀戮的方式来添加不必要的代码行到我的项目?

c# xml memorystream

8
推荐指数
1
解决办法
4万
查看次数

Mimic File.Move如果目的地已经存在

来自以下文件File.Move:

请注意,如果您尝试通过将同名文件移动到该目录来替换文件,则会出现IOException.您不能使用Move方法覆盖现有文件.

简而言之,你不能覆盖Move,所以为了方便覆盖Move,我通过做一个File.Copy后面的模仿行为File.Delete.就像是:

if (File.Exists(dstFileName))
{
    // System.IO.File.Move cannot be used to overwrite existing files, so we're going
    // to simulate that behavior with a Copy & Delete.
    File.Copy(procContext.FileName, dstFileName);
    File.Delete(procContext.FileName);
}
else
    File.Move(procContext.FileName, dstFileName);
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有任何我需要防范的情况可能会导致源文件被删除而不首先被成功复制?

我从阅读文档中得到的理解是,因为File.Copy它不会返回任何在它不成功的情况下应该抛出异常的东西.有没有人遇到过任何不真实的情况?

c# copy file

7
推荐指数
2
解决办法
9113
查看次数

标签 统计

c# ×2

copy ×1

file ×1

memorystream ×1

xml ×1