尝试在表单加载时加载 XML 文件,出现错误

本文关键字:加载 错误 文件 表单 XML | 更新日期: 2023-09-27 18:25:01

在C#中,我试图检查是否创建了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((

{ using (XmlWriter xWriter = XmlWriter.Create(GlobalVars.strXMLPath(( { xWriter.WriteStartDocument((; xWriter.WriteComment("此文件包含所有应用程序、版本、源和目标路径。 xWriter.WriteStartElement("application"(; xWriter.WriteFullEndElement((; xWriter.WriteEndDocument((; }

尝试在表单加载时加载 XML 文件,出现错误

File.Create()返回一个锁定文件的FileStream,直到文件关闭。

您根本不需要打电话给File.Create(); doc.Save()将创建或覆盖该文件。

我会建议这样的事情:

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 不会创建文件,只能使用已经创建的文件

您可以创建一个流,将FileMode设置为 FileMode.Create,然后使用该流将 Xml 保存到指定的路径。

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