0

在 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))
{
using (XmlWriter xWriter = XmlWriter.Create(GlobalVars.strXMLPath)) { xWriter.写开始文档();xWriter.WriteComment("此文件包含所有应用程序、版本、源和目标路径。"); xWriter.WriteStartElement("应用程序"); xWriter.WriteFullEndElement(); xWriter.WriteEndDocument(); }

4

3 回答 3

2

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

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

于 2013-07-26T16:14:03.913 回答
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不会创建文件,只能使用已经创建的文件

于 2013-07-26T16:22:28.103 回答
0

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

using (System.IO.Stream stream = new System.IO.FileStream(GlobalVars.strXMLPath, FileMode.Create))
{
    XmlDocument doc = new XmlDocument();
    ...
    doc.Save(stream);
}
于 2013-07-26T16:23:19.263 回答