错误:无法访问文件,因为文件正由另一个进程访问

时间:2009-08-06 10:53:26

标签: c# xml

我正在开发一个项目,我需要将xml写入文件,  这发生在for循环中,

for(int i = 0; i < screens.length; screens++)
{
    XMLDocument allScreens = new XMLDocument();
    allScreens.Load(allScreeensPath);
    XMLNode node = allScreens.Select("//Screen[@name='" + screens[i].name + "']");
    allScreens.Remove(node);
    allScreens.Add(nweNode);
    allScreens.Save(allScreeensPath);
}

基本上xml文档被访问,修改并保存在for循环中,这项工作有时候。有时我得到以下错误,

我尝试使用文本阅读器,文本编写器来执行文件操作(这样我可以关闭,处理编写器)但错误仍然存​​在。我怎么能通过这个?

3 个答案:

答案 0 :(得分:5)

这可能(不确定)因为你为循环的每次迭代重新打开XML文件,这似乎是不必要的。而是在循环之前打开文档,执行循环,然后保存它。

XMLDocument allScreens = new XMLDocument();
allScreens.Load(allScreeensPath);

for(int i = 0; i < screens.length; screens++)
{
    XMLNode node = allScreens.Select("//Screen[@name='" + screens[i].name + "']");
    allScreens.Remove(node);
    allScreens.Add(nweNode);
}
allScreens.Save(allScreeensPath);

(我不确定nweNode在代码示例中出现在哪里,但是我将其保留,因为我只重写了原始代码示例)

答案 1 :(得分:4)

最简单的方法是加载一次,完成所需的所有处理,然后保存一次。

我不知道为什么它暂时不起作用,但我认为没有必要继续加载和保存。例如,这是代码的替代版本:

XMLDocument allScreens = new XMLDocument();
allScreens.Load(allScreeensPath);
foreach (Screen screen in screens)
{
    XMLNode node = allScreens.Select("//Screen[@name='" + screen.Name + "']");
    allScreens.Remove(node);
    allScreens.Add(newNode);
}
allScreens.Save(allScreeensPath);

答案 2 :(得分:0)

您好像多次更新同一个文件?

您应该对内存中的XMLDocument执行所有更新,并在for循环之后保存到文件中。