我有一个用.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()方法,但这没有帮助。这里可能缺少什么?
我还测试了在调试模式下运行程序,然后在第一个代码块运行后等待一点,然后再继续。它仍然给出了同样的错误,这不是代码运行如此接近的问题,以至于在尝试读取之前文件写入没有完全释放。
谢谢!
答案 0 :(得分:3)
我能够通过更改逻辑来使用using语句而不是创建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语句可以解决问题,但我很高兴能够解决这个问题。