XML序列化程序文件已经在使用错误?

时间:2012-02-17 07:07:13

标签: c# serialization

当我尝试在代码隐藏文件中使用以下代码时,它运行成功,但是当我刷新ASP.NET webform时,它给出了一个已经在使用的文件错误,错误在代码下面给出。

    string filename = "D:\\project\\data\\latest\\today.xml";
    XmlSerializer serializer = new XmlSerializer(typeof(searchResult));

    serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode);
    serializer.UnknownAttribute += new XmlAttributeEventHandler(serializer_UnknownAttribute);

    FileStream fs = new FileStream(filename, FileMode.Open);

    searchResult po;

    po = (searchResult)serializer.Deserialize(fs);

这是错误

  

该进程无法访问文件'D:\ project \ data \ latest \ today.xml',因为它正由另一个进程使用。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.IO.IOException:进程无法访问文件“D:\ project \ data \ latest \ today.xml”,因为它正由另一个进程使用。

错误来源

  

第141行:FileStream fs = new FileStream(filename,FileMode.Open);

1 个答案:

答案 0 :(得分:1)

每次使用流打开文件时,都有可能锁定文件,以便其他流无法访问该文件。您应该尽快关闭流。

每次使用IDisposable对象时,我都希望使用using关键字。

我的意思是:

using(var fs=OpenFile(filename))
{
//do my work
fs.close();
}

以这种方式,即使我忘记关闭我的流,它也会被最终处理掉,并且无论如何都会被关闭。