2015-08-15 69 views
0

我有一个看起来有点像这样的XML文件:XmlReader让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行上。显然,读者仍然是开放的,我不知道如何在保存之前关闭读者。

+1

你肯定*不*通过一些其他进程打开 - 创建它例如一个?修复您的XML并用记事本保存后,我无法重现您的错误。请注意,如果文件被锁定以供其他进程写入,它可能仍然可以打开以供阅读。 – dbc

回答

0

我试过你的代码是正确的。但是你的XML是不是,到底应该关闭<Paths>元素不<Path>

<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> 
+0

感谢您指出“路径”/“路径”错字(我编辑我的问题是正确的)。原来,我在应用程序的早期读取了文件,忘记关闭()读者... * facepalm *我将这个答案标记为接受,因为进程管理器将我引导至解决方案。 –