2013-09-24 33 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