尝试在表单加载时加载XML文件,获取错误

时间:2013-07-26 16:13:04

标签: c# xml

在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文件     if(!File.Exists(GlobalVars.strXMLPath))
    {
    使用(XmlWriter xWriter = XmlWriter.Create(GlobalVars.strXMLPath))     {     xWriter.WriteStartDocument();     xWriter.WriteComment(“此文件包含所有应用程序,版本,源和目标路径。”);     xWriter.WriteStartElement( “应用程序”);     xWriter.WriteFullEndElement();     xWriter.WriteEndDocument();     }

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我会建议这样的事情:

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

答案 2 :(得分:0)

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

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