【问题标题】:How to resolve IOException "file used by another process" while saving XmlDocument?保存XmlDocument时如何解决IOException“文件被另一个进程使用”?
【发布时间】:2015-08-12 09:35:41
【问题描述】:

当我尝试保存 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");
     }

【问题讨论】:

  • 此文件是否仅由单个应用程序使用?
  • 是的。它是唯一使用此方法的应用程序。
  • 你需要在加载和保存文件时使用锁...
  • 听起来不错。但是我该怎么做呢?

标签: c# ioexception xmldocument


【解决方案1】:

它可能是您的其他方法之一,或者打开文件并且没有很好地调用它的代码的其他部分。尝试搜索此类问题。

【讨论】:

    【解决方案2】:
    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");
    }   
    

    【讨论】:

    • 异常仍然发生。在另一个位置,但仍然。因为我的程序总是调用以我上面编写的代码样式编辑当前 xml 文件的方法。
    • 另一个位置是什么意思?你用同一个对象在所有地方都加了锁吗?
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2016-12-24
      • 2020-10-24
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2018-09-20
      相关资源
      最近更新 更多