2013-09-24 54 views
0

我正在學習c#,我想檢查文件是否存在。如果存在,它應該加載並寫入一個xml文件。如果它不存在,它應該創建它,之後它應該加載並寫入xml文件。但是,如果我點擊我的按鈕,出現錯誤:C#:檢查文件是否存在 - 進程無法訪問文件錯誤

「進程無法訪問文件,因爲它正在被另一個進程使用。」

在這裏你可以看到我的代碼:

private void btnSave_Click(object sender, EventArgs e) 
{ 
    XElement xmlnode = new XElement("Namespace", 
      new XElement("RandomText1", textBox1.Text), 
      new XElement("RandomText2", textBox2.Text), 
      new XElement("RandomText3", textBox3.Text) 
    ); 

    XElement xmlFile; 
    try 
    { 
     xmlFile = XElement.Load("testsave.xml"); 
     xmlFile.Add(xmlnode); 
    } 
    catch (XmlException) 
    { 
     xmlFile = new XElement("Test", xmlnode); 
    } 

    xmlFile.Save("testsave.xml"); 
    DataSet ds = new DataSet(); 
    ds.ReadXml("testsave.xml"); 
    DataTable dt = ds.Tables[0]; 
    dataGridView1.DataSource = dt; 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    if (!File.Exists("testsave.xml")) 
    { 
     File.Create("testsave.xml"); 
    } 
} 
+2

關閉的FileStream。 – Muctadir

+0

爲什麼在'try/catch'之前檢查/創建'Form1_Load'中的xml文件而不是'btnSave_Click'? – Corak

+0

這是另一個想法。有什麼不同?每一個提示都是值得歡迎的,因爲我在學習:) – rschweri

回答

5

問題是File.Create創建一個文件並返回你打開的FileStream。所以當你試圖訪問它時,你會得到異常。您必須先關閉它,然後再使用它。

嘗試通過File.Create()返回此

using (File.Create("testsave.xml")) 
{ } 

或者

File.Create("testsave.xml").Close(); 
+0

aaaah不錯!非常感謝:)聽起來合乎邏輯:) – rschweri

+0

@rschweri不客氣 –

0

如果您打開另一個程序文件發生此錯誤。關閉它,如果你在其他程序中打開它並再次運行你的應用程序

+0

我只是打開它VS2012進行調試,無處可去 – rschweri