C#:检查文件是不是存在 - 进程无法访问文件错误
Posted
技术标签:
【中文标题】C#:检查文件是不是存在 - 进程无法访问文件错误【英文标题】:C#: check if file exists - process cannot access file errorC#:检查文件是否存在 - 进程无法访问文件错误 【发布时间】:2013-09-29 08:19:12 【问题描述】:我现在正在学习 c#,我想检查文件是否存在。如果它存在,它应该加载并写入一个 xml 文件。如果它不存在,它应该创建它,然后它应该加载和写入 xml 文件。但是如果我点击我的按钮,就会出现错误:
“该进程无法访问该文件,因为它正被另一个进程使用。”
在这里你可以看到我的代码:
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");
【问题讨论】:
关闭File.Create()返回的FileStream。 为什么要在Form1_Load
中检查/创建xml 文件,而不是在btnSave_Click
中try/catch
之前?
那是另一个想法。有什么不同?欢迎每一个提示,因为我正在学习:)
写软件的时候,有时候偷懒是好事。只做你必须的事情。当您打开表单时,您是否必须确保文件存在?还有什么依赖于此,还是只是一个按钮?如果有人打开表单但没有按下按钮怎么办?然后可能会不必要地创建该文件。此外,您甚至不必像那样创建它。 xmlFile.Save("...")
会在它不存在时创建它,所以你只需要检查它是否存在就知道你是否应该尝试加载它。
最后,DataSet.ReadXml 有一个重载,它需要一个字符串。您已经在xmlFile
变量中拥有了testsave.xml
的完整内容。因此,当您可以像ds.ReadXml(xmlFile.ToString());
一样传递它时,无需走漫长(且缓慢)的方式并从您刚刚保存数据的磁盘中检索该数据。
【参考方案1】:
如果您在另一个程序中打开该文件,则会发生此错误。如果您在其他程序中打开过它,请关闭它并再次运行您的应用程序
【讨论】:
我只是在其中打开 VS2012 进行调试,别处没有【参考方案2】:问题是File.Create
创建一个文件并返回您打开的FileStream
。因此,当您稍后尝试访问它时,您会遇到异常。您必须先关闭它才能稍后使用它。
试试这个
using (File.Create("testsave.xml"))
或者
File.Create("testsave.xml").Close();
【讨论】:
啊啊啊好极了!非常感谢:)听起来合乎逻辑:)以上是关于C#:检查文件是不是存在 - 进程无法访问文件错误的主要内容,如果未能解决你的问题,请参考以下文章
C#使用读写锁三句代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题