C# WriteXml(XmlTextWriter)使XML文件处于锁定状态

C# WriteXml(XmlTextWriter)使XML文件处于锁定状态,c#,xml,dataset,xmlwriter,filelock,C#,Xml,Dataset,Xmlwriter,Filelock,我有一个用.NET3.5编写的程序,它将数据保存到一个XML文件中,在那之后,大部分时间都不使用它。但是,有时它需要将XML文件读回。当我尝试这样做时,XML文件读取失败,错误是文件“正在被另一个进程使用” 以下是执行XML文件写入的代码: DataSet ds = new DataSet(); ds.Tables.Add(populatedDataTable); XmlTextWriter xmlWrite = new XmlTextWriter("C:\test\output.xml",

我有一个用.NET3.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()方法在第一个块中运行,为什么该文件仍在使用?我也尝试在第一个块中对数据集调用Dispose()方法,但没有帮助。这里可能缺少什么

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


谢谢

我通过将逻辑更改为使用语句,而不是创建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语句可以解决这个问题,但我很高兴能够解决这个问题。

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