【问题标题】:exception occurs while saving XML using c#使用 c# 保存 XML 时发生异常
【发布时间】:2015-02-21 12:26:54
【问题描述】:

我正在尝试通过使用 c# 添加新的子节点来更新现有的 XML 文件。 如果我用新名称保存它,一切都很好,但我想更新同一个文件,并且在执行此操作时出现以下异常:

System.IO.IOException:进程无法访问文件...因为它是 正在被另一个进程使用

这是我的代码:(我正在尝试添加一个新的默认节点)

XmlDocument doc = new XmlDocument();
string path = @"C:\Debug\default.xml";
doc.Load(path);
XmlNode NName = doc.CreateElement("default");

XmlNode SNO = doc.CreateElement("SNo");
SNO.InnerText = "2";
NName.AppendChild(SNO);

doc.DocumentElement.AppendChild(NName);

doc.Save(path);

还有 XML 文件:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <default>
    <SNo>1</SNo>
  </default>
</NewDataSet>

【问题讨论】:

  • 因为它正被另一个进程使用这对你没有任何意义?
  • “因为它正被另一个进程使用” - 好吧,is it?
  • 确保您没有在其他地方打开此 xml 文件(例如在浏览器中查看)
  • @david 是的,我知道该文件正在被同一进程用于创建节点,但现在如何解决这个问题?
  • 它表示它已被另一个进程使用,因此您要么在当前代码之外的其他地方打开它。

标签: c# xml ioexception


【解决方案1】:

如果您确定该文件仅由您的进程使用,则只需将其读入字节数组,关闭文件,然后再次保存: (我在这个示例中使用 .net 4.0):

 XmlDocument doc = new XmlDocument();
 byte[] content = File.ReadAllBytes(path);
 using (var memStream = new MemoryStream(content))
 {
     doc.Load(memStream);
 }
 XmlNode NName = doc.CreateElement("default");

 XmlNode SNO = doc.CreateElement("SNo");
 SNO.InnerText = "2";
 NName.AppendChild(SNO);

 doc.DocumentElement.AppendChild(NName);

 doc.Save(path);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2017-11-23
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多