尝试在表单加载时加载 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((; }
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);
}