【问题标题】:DataSet.WriteXml(XmlTextWriter) Leaves XML File LockedDataSet.WriteXml(XmlTextWriter) 使 XML 文件保持锁定状态
【发布时间】:2013-11-26 05:34:07
【问题描述】:

我有一个用 .NET 3.5 编写的程序,它将数据保存到一个 XML 文件中,之后大部分时间都不会处理它。但是,有时它需要重新读取该 XML 文件。当我尝试执行此操作时,XML 文件读取失败,并显示该文件“正在被另一个进程使用”的错误。

这是执行 XML 文件写入的代码:

DataSet ds = new DataSet();
ds.Tables.Add(populatedDataTable);

XmlTextWriter xmlWrite = new XmlTextWriter("C:\test\output.xml", Encoding.UTF8);
ds.WriteXml(xmlWrite);
xmlWrite.Close();

下面是尝试读回 XML 文件的代码:

TextReader tr = new StreamReader("C:\test\output.xml");
DataSet dsXmlData = new DataSet();
dsXmlData.ReadXml(tr);

既然 XmlTextWriter.Close() 方法在第一个块中运行,为什么该文件仍在使用中?我也尝试在第一个块中调用 DataSet 上的 Dispose() 方法,但这没有帮助。这里可能缺少什么?

我还测试了在调试模式下运行程序,然后在第一个代码块运行后稍等片刻,然后再继续。它仍然给出了同样的错误,这不是代码运行得太近以至于在尝试读取之前文件写入没有完全释放的问题。

谢谢!

【问题讨论】:

  • 根据 MSDN,你真的应该使用静态 XmlWriter.Create 方法。

标签: c# xml dataset xmlwriter filelock


【解决方案1】:

我能够通过将逻辑更改为使用语句而不是创建 XmlTextWriter 然后手动关闭它来解决问题。

这是旧代码:

XmlTextWriter xmlWrite = new XmlTextWriter("C:\test\output.xml", Encoding.UTF8);
ds.WriteXml(xmlWrite);
xmlWrite.Close();

这是不再存在问题的新代码:

using(XmlTextWriter xmlWrite = new XmlTextWriter("C:\test\output.xml", Encoding.UTF8))
    ds.WriteXml(xmlWrite);

对于任何好奇的人,我不知道为什么 using 语句可以解决问题,但我很高兴解决了这个问题。

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 2011-04-24
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多