【发布时间】:2013-02-05 23:07:59
【问题描述】:
我研究了几个问题,但我找到的答案都没有帮助。此函数的目标是修改 xml 文件。我读取原始文件并将旧的东西和新的东西写入新文件。所有这一切都完美无缺。当我完成并需要删除旧文件并移动新文件时出现问题。
收到的错误是 jnv_config.xml 正在被另一个进程(阅读器文件)使用。
移除 Close 和/或 Dispose 并不能解决问题。
using (XmlReader reader = XmlReader.Create("jnv_config.xml"))
using (XmlWriter writer = XmlWriter.Create("jnv_temp.xml"))
{
writer.WriteStartDocument();
while (reader.Read())
{
// Read the file, write to the other file - this part works perfectly.
// No filestreams nor anything else is created in here.
}
writer.WriteEndElement();
writer.WriteEndDocument();
reader.Close();
writer.Close();
reader.Dispose();
writer.Dispose();
}
// Delete the old file and copy the new one
File.Delete("jnv_config.xml");
//File.Move("jnv_temp.xml", "jnv_config.xml");
我正在使用 VS2012 (NET 4.5)、C#、标准 Windows 窗体项目。
【问题讨论】:
-
由于您有
using关键字,您不必调用reader.Dispose()或writer.Dispose()。一旦超出范围(在using之外),它们将被发送到Garbage Collection。 -
出于好奇,为什么要将 XML 从一个文件复制到另一个文件,然后删除原始文件并将新文件重命名为原始文件?这不是无操作吗?
-
@BennorMcCarthy 我假设 CramerTV 的实际代码确实更改了 XML,但这是一个简化版本,只是演示了问题。
-
@BennorMcCarthy,如果用户更改了应用程序配置中的某些内容,我会更改配置文件以反映这些更改。我评论的重点是确保人们理解我没有创建任何可能使文件描述符保持打开状态的新对象。
-
是的,我认为可能是这样。