Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误:无法访问文件,因为其他进程正在访问文件_C#_Xml - Fatal编程技术网

C# 错误:无法访问文件,因为其他进程正在访问文件

C# 错误:无法访问文件,因为其他进程正在访问文件,c#,xml,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 +

我正在做一个项目,我需要将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);
}
for(int i=0;i
基本上,xml文档是在for循环中访问、修改和保存的,有时这是可行的。有时我会出现以下错误


我尝试使用文本读取器、文本编写器执行文件操作(以便关闭、处置编写器),但错误仍然存在。我如何度过这一关?

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

诚然,我不知道为什么它现在不起作用,但我认为没有必要继续加载和保存。例如,下面是代码的另一个版本:

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);
这可能是(不确定),因为您为循环的每个迭代重新打开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);
XMLDocument allScreens=new XMLDocument();
allScreens.Load(allscreenspath);
对于(int i=0;i

(我不确定
nweNode
在代码示例的图片中出现在哪里,但我保留了它,因为我只修改了原始代码示例)

看起来您正在多次更新同一文件

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