C#WPF XMLReader和XMLWriter System.IO.IOException

时间:2017-10-12 08:50:20

标签: c# ioexception xmlreader xmlwriter

我在WPF中有2个按钮。

第一个将信息写入XML 第二个将其恢复为List

写功能:

public static void Write(List<string> numbers) {

    XmlWriterSettings myWriterSettings = new XmlWriterSettings();
    myWriterSettings.CloseOutput = true;
    myWriterSettings.NewLineOnAttributes = true;
    using (XmlWriter myWriter = XmlWriter.Create(XMLPathRestore, myWriterSettings)) {

        myWriter.WriteStartDocument();
        myWriter.WriteStartElement("Something");

        //Writing numbers into XML

        myWriter.WriteEndElement();
        myWriter.WriteEndDocument();
        myWriter.Close();
    }
}

阅读功能:

public static List<string> Read() {

    List<string> numbers = new List<string>();

    XmlReaderSettings myReaderSettings = new XmlReaderSettings();
    myReaderSettings.CloseInput = true;

    if (File.Exists(XMLPath) == true) {
        XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings);
        while (myReader.Read()) {
            //Fill List<string> numbers from XML
        }
    }
    return concernNumbers;
}

当我现在交替读取和写入几次后,我将得到一个System.IO.IOException,告诉我该进程无法访问XML文件,因为它被另一个进程使用。

我想我可以通过在编写器和阅读器上将CloseInput设置为true来处理这个问题,但它不起作用。

有没有人有想法?

3 个答案:

答案 0 :(得分:3)

你已经有一个using - 阻止作者,当该块被留下时应该自动关闭XmlWriter。在阅读代码中添加使用块应该可以正常工作

using (XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings))
{
  while (myReader.Read()) {
    //Fill List<string> numbers from XML
  }
}

通常,使用IDisposableusing实施Dispose的类来确保调用$memberDetails = new MemberSearch(); $results=ArrayHelper::toArray($memberDetails ,[ 'common\models\Member'=>[ 'id', 'name', ... ... ] ] ); 并清除所有资源。

请参阅the documentation on using

答案 1 :(得分:1)

阅读完毕后关闭读者:

myReader.Close();

答案 2 :(得分:0)

using (var reader = XmlReader.Create(XMLPath, myReaderSettings)
{
    while (myReader.Read()) {

    }
}

使用块将在完成后处理每个读者实例,我建议你使用using block