C# 无法访问简单文件";因为它正被另一个进程使用”;
我的类EDIDocument中有一个简单的方法,用于加载xml:C# 无法访问简单文件";因为它正被另一个进程使用”;,c#,C#,我的类EDIDocument中有一个简单的方法,用于加载xml: /// <summary> /// Method used to load specific target file as template /// </summary> /// <param name="filepath">file path</param> /// <returns>loading status</retu
/// <summary>
/// Method used to load specific target file as template
/// </summary>
/// <param name="filepath">file path</param>
/// <returns>loading status</returns>
public bool Load(string filepath)
{
//file exists
bool returnValue = File.Exists(filepath);
//file is a xml
returnValue &= Path.GetExtension(filepath).Equals(".xml");
//if file is valid
if (returnValue)
{
XmlReader reader = XmlReader.Create(filepath);
//load document
this._xmldoc = XDocument.Load(reader);
//load complete
returnValue &= (this._xmldoc != null);
}
//End of method
return returnValue;
}
//
///用于将特定目标文件作为模板加载的方法
///
///文件路径
///装载状态
公共bool加载(字符串文件路径)
{
//文件存在
bool returnValue=File.Exists(filepath);
//文件是一个xml文件
returnValue&=Path.GetExtension(filepath).Equals(“.xml”);
//如果文件有效
如果(返回值)
{
XmlReader=XmlReader.Create(文件路径);
//加载文档
此.xmldoc=XDocument.Load(读卡器);
//装载完成
returnValue&=(this.\u xmldoc!=null);
}
//方法结束
返回值;
}
我对该方法进行了单元测试:
/// <summary>
/// Test success on load xml document
/// </summary>
[TestMethod]
public void TestLoadXML_Success()
{
File.Create("xml.xml");
//create document
EDIDocument doc = new EDIDocument();
//load something wrong
bool result = doc.Load("xml.xml");
//test
Assert.IsTrue(result);
}
//
///加载xml文档时测试成功
///
[测试方法]
public void TestLoadXML_Success()
{
创建(“xml.xml”);
//创建文档
EDIDocument doc=新的EDIDocument();
//装错东西了
bool result=doc.Load(“xml.xml”);
//试验
断言(结果);
}
当我开始单元测试时,我总是有一个例外:
测试方法EDIDocumentTest.TestLoadXML_成功引发异常:
System.IO.IOException:进程无法访问文件“C:…\Debug\xml.xml”,因为另一个进程正在使用该文件
我在谷歌上搜索了这个问题,并尝试了XmlReader、StreamReader的多种解决方案。。。我总是有同样的例外
我的问题是:如何在方法加载中修复此异常
谢谢
文件。Create
将一个流返回到该文件,因此它将保持对该文件的句柄打开。您需要先关闭该文件。这应该起作用:
File.Create(“xml.xml”).Close()代码>
有关更多详细信息,请参见此问题:您需要处理XmlReader
:
using (XmlReader reader = XmlReader.Create(filepath))
{
//load document
this._xmldoc = XDocument.Load(reader);
//load complete
returnValue &= (this._xmldoc != null);
}
您还需要更改创建文件的方式,如下所示:
File.WriteAllText("xml.xml", "");
因为您从不处理文件中使用的文件系统句柄。Create
有一个返回值。这是一个
该文件流保存该文件。
您需要处置该文件流才能访问该文件:
FileStream f = File.Create("xml.xml");
f.Dispose();
或:
如果您不手动处理它,当GC收集它时,它将被随机处理。。。但在此之前,它将保存该文件。这太完美了,请点击链接;)这不是我的解决方案,但在我的情况下,我认为最好使用您的语句“使用(…”
using (File.Create("xml.xml")) {}