C# 无法访问简单文件";因为它正被另一个进程使用”;

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

我的类EDIDocument中有一个简单的方法,用于加载xml:

    /// <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")) {}