【问题标题】:XmlReader leaving xml file open?XmlReader 让 xml 文件保持打开状态?
【发布时间】:2015-08-15 02:04:52
【问题描述】:

我有一个看起来有点像这样的 XML 文件:

<Paths>
    <Path>
        <Other stuff be here/>
    </Path>
</Paths>

我想以编程方式在当前节点之后添加一个新的“路径”节点,但仍在“路径”节点内。这是我正在尝试的:

XmlDocument xmlDoc = new XmlDocument();
string xmlFilePath = "ThatFileFromAbove.xml";
using (XmlReader reader = XmlReader.Create(xmlFilePath))
xmlDoc.Load(reader);
XmlNode newPathNode = xmlDoc.CreateNode(XmlNodeType.Element, "Path", "Test");
xmlDoc.GetElementsByTagName("Paths")[0]
   .InsertAfter(newPathNode, xmlDoc.GetElementsByTagName("Paths")[0].LastChild);
xmlDoc.Save(xmlFilePath);

我最终得到一个异常:

“该进程无法访问该文件,因为它正被另一个进程使用。”

这发生在xmlDoc.Save 行。显然阅读器仍处于打开状态,我无法弄清楚如何在保存之前关闭阅读器。

【问题讨论】:

  • 你确定它没有被其他进程打开——例如创建它的进程吗?修复您的 XML 并使用记事本保存后,我无法重现您的错误。请注意,如果文件被另一个进程锁定以进行写入,它可能仍然可以打开以进行读取。

标签: c# xml save


【解决方案1】:

我试过你的代码是正确的。但是您的 XML 不是,最后应该关闭 &lt;Paths&gt; 元素而不是 &lt;Path&gt;

<Paths>
    <Path>
        <!-- Other stuff be here -->
    </Path>
</Paths>

还要确保该文件确实没有在另一个进程中使用。 您可以使用流程资源管理器工具找到它。 (http://windowsxp.mvps.org/processlock.htm)

结果 XML:

<Paths>
    <Path>
        <!-- Other stuff be here -->
    </Path>
    <Path xmlns="Test" />
</Paths>

【讨论】:

  • 感谢您指出“路径”/“路径”错字(我已将我的问题编辑为正确)。结果我之前在应用程序中阅读了文件并忘记关闭()阅读器...... facepalm我将此答案标记为已接受,因为流程资源管理器引导我找到解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多