2013-07-26 50 views
1

在C#中,試圖檢查是否創建XML文件,如果不創建該文件,然後創建xml聲明,註釋和父節點。嘗試在表單加載時加載XML文件,獲取錯誤

當我嘗試加載它,它給了我這個錯誤:

「該進程無法訪問文件‘C:\ FileMoveResults \ Applications.xml’,因爲它正被另一個進程使用。」

我檢查了任務管理器,確保它沒有打開,並且確實沒有打開任何應用程序。任何想法發生了什麼?

這裏是我使用的代碼:

//check for the xml file 
if (!File.Exists(GlobalVars.strXMLPath)) 
{ 
//create the xml file 
File.Create(GlobalVars.strXMLPath); 

//create the structure 
XmlDocument doc = new XmlDocument(); 
doc.Load(GlobalVars.strXMLPath); 

//create the xml declaration 
XmlDeclaration xdec = doc.CreateXmlDeclaration("1.0", null, null); 

//create the comment 
XmlComment xcom = doc.CreateComment("This file contains all the apps, versions, source and destination paths."); 

//create the application parent node 
XmlNode newApp = doc.CreateElement("applications"); 

//save 
doc.Save(GlobalVars.strXMLPath); 

這裏是我結束了使用來解決這個問題的代碼:// 檢查XML文件 如果(File.Exists(GlobalVars! strXMLPath))
{
使用(的XmlWriter xWriter = XmlWriter.Create(GlobalVars.strXMLPath)) { xWriter.WriteStartDocument(); xWriter.WriteComment(「此文件包含所有應用程序,版本,源和目標路徑。」); xWriter.WriteStartElement(「application」); xWriter.WriteFullEndElement(); xWriter.WriteEndDocument(); }

+0

空文件的'doc.Load()'會拋出異常。 – SLaks

回答

2

我建議是這樣的:

string filePath = "C:/myFilePath"; 
XmlDocument doc = new XmlDocument(); 
if (System.IO.File.Exists(filePath)) 
{ 
    doc.Load(filePath); 
} 
else 
{ 
    using (XmlWriter xWriter = XmlWriter.Create(filePath)) 
    { 
     xWriter.WriteStartDocument(); 
     xWriter.WriteStartElement("Element Name"); 
     xWriter.WriteEndElement(); 
     xWriter.WriteEndDocument(); 
    } 

    //OR 

    XmlDeclaration xdec = doc.CreateXmlDeclaration("1.0", null, null); 
    XmlComment xcom = doc.CreateComment("This file contains all the apps, versions, source and destination paths."); 
    XmlNode newApp = doc.CreateElement("applications"); 
    XmlNode newApp = doc.CreateElement("applications1"); 
    XmlNode newApp = doc.CreateElement("applications2"); 
    doc.Save(filePath); //save a copy 
} 

目前你的代碼是有問題的原因是因爲:File.Create創建該文件並打開流的文件,然後你永遠不使用它(從來沒有關閉它),在這條線:

//create the xml file 
File.Create(GlobalVars.strXMLPath); 

,如果你不喜歡的東西

//create the xml file 
using(Stream fStream = File.Create(GlobalVars.strXMLPath)) { } 

然後你不會得到那個使用異常。

作爲一個側面說明XmlDocument.Load不會創建一個文件,只能用工作已經創建一個

+0

謝謝,第一個選項使用XmlWriter工作! – user2619395

2

File.Create()返回一個FileStream鎖定文件,直到它關閉。

根本不需要撥打File.Create(); doc.Save()將創建或覆蓋該文件。

0

您可以創建一個流,設置FileModeFileMode.Create,然後使用流將XML保存到指定的路徑。

using (System.IO.Stream stream = new System.IO.FileStream(GlobalVars.strXMLPath, FileMode.Create)) 
{ 
    XmlDocument doc = new XmlDocument(); 
    ... 
    doc.Save(stream); 
}