系统.IO.IOException错误,无法访问文件。

3

尽管这段代码非常简单,但我仍然无法理解问题出在哪里。

我有这样的一个函数:

public void WriteToDoc(string path)    
{
     XDocument doc = new XDocument(new XElement("General parameters",
                                   new XElement("num_path", num_path.Text),
                                   new XElement("Gen_Peroid", Gen_Peroid.Text),
                                   new XElement("Alg_Perioad", Alg_Perioad.Text))
                                  );
     doc.Save(path); // here he gives that exception
}

num_path.TextGen_Peroid.TextAlg_Perioad.Text都是string类型的。

这是我使用该函数的方式:

File.Create(@"C:\ProgramData\RadiolocationQ\Q.xml");
WriteToDoc(@"C:\ProgramData\RadiolocationQ\Q.xml");

它创建了文件,但是文件中没有写入任何内容。因此,出现了确切的错误System.IO.IOException,该进程无法访问文件,因为它正在被另一个进程使用。如何可能出现这样的错误?

4个回答

2

正如其他答案所述,您没有关闭输出文件。使用LinqToXML保存XML文件的正确方法是:

System.Xml.XmlWriterSettings xws = new System.Xml.XmlWriterSettings();
xws.Indent = true;
xws.IndentChars = "\t";

FileStream fsConfig = new FileStream(path, FileMode.Create);
using (System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create(fsConfig, xws))
{
       doc.Save(xw);
}
fsConfig.Close();

这将释放文件和流。如果不需要,您可以省略XmlWriterSettings


2

您是拥有它打开的进程!

不要先调用File.Create - 它会保留文件流,您无法覆盖该文件。

XDocument.Save将创建文件 - 您不必这样做:

将此XDocument序列化为文件,如果存在该文件,则覆盖现有文件。


2

尝试

System.IO.File.Create(@"C:\ProgramData\RadiolocationQ\Q.xml").Close();

编辑:Reinhards的回答更好。我的方法只是关闭了File.Create()流,这会锁定文件,但实际上是没有必要的。


2

XDocument.Save会在文件不存在时创建一个文件。不需要使用File.Create()

File.Create()不会关闭文件,它会锁定文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接