2009-08-06 21 views
0

嗨,我工作的一個項目,在我需要編寫的XML文件, 這種情況發生在一個for循環訪問,錯誤:文件無法accesssed的文件被其它進程

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); 
} 

basicalyy xml文檔被訪問,修改並保存在for循環中,這個工作有些時候。和一些thimes我得到以下錯誤,

我嘗試使用文本閱讀器,文本作家做文件操作(以便我可以關閉,處置作家),但錯誤仍然存​​在,任何人都可以提出如何我可以得到通過這個??

在此先感謝。

回答

5

這可能是(不知道雖然),因爲你重新打開你的循環,這似乎unnnecessary的每一次迭代的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進入的代碼示例中的圖片,但我離開它,因爲我只修改了原來的代碼示例)

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); 
0

看起來你正在更新的同一個文件多次?

您應該對內存中的XMLDocument執行所有更新,並在for循環後保存到該文件。

相關問題