在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();
}
答案 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);
}