如何解决另一个进程使用的IOException文件同时保存XmlDocument

本文关键字:文件 IOException XmlDocument 保存 何解决 解决 进程 另一个 | 更新日期: 2023-09-27 18:07:23

当我试图保存XML文档时,我编辑了IOException"由另一个进程使用的文件",当我试图保存该文档时发生。有办法解决这个问题吗?

注意:每次在XmlDocument中写入新元素时,都会调用此方法。

    public void saveRectangleAsXMLFragment()
    {
            XmlDocument doc = new XmlDocument();
            doc.Load("test.xml");
            XmlDocumentFragment xmlDocFrag = doc.CreateDocumentFragment();
            String input = generateXMLInput();
            xmlDocFrag.InnerXml = input;
            XmlElement mapElement = doc.DocumentElement;
            mapElement.AppendChild(xmlDocFrag);
            input = null;
            mapElement = null;
            xmlDocFrag = null;
            doc.Save("test.xml");
     }

如何解决另一个进程使用的IOException文件同时保存XmlDocument

这可能是你的其他方法之一,或其他部分的代码打开文件,并没有很好地关闭它。试着搜索这类问题

try this if your's application is only access that .xml file
1. Create a Object globally
object lockData = new object();
2.Use than object to lock statement where you save and load xml
lock(lockData )
{
     doc.Load("test.xml");
}   
lock(lockData )
{
     doc.Save("test.xml");
}   

来自Jon Skeet的相关回答(参见https://stackoverflow.com/a/8354736/4151626)

似乎在XmlDocument.Save()对文件流的处理中有一个bug,它变成了固定的,既不是Closed()也不是Disposed()。通过直接控制XmlDocument.Save()之外的流的创建和处置,我能够绕过这个停止错误。

//e.g.
XmlWriter xw = new XmlWriter.Create("test.xml");
doc.Save(xw);
xw.Close();
xw.Dispose();