当我尝试在代码隐藏文件中使用以下代码时,它运行成功,但是当我刷新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);
答案 0 :(得分:1)
每次使用流打开文件时,都有可能锁定文件,以便其他流无法访问该文件。您应该尽快关闭流。
每次使用IDisposable对象时,我都希望使用using关键字。
我的意思是:
using(var fs=OpenFile(filename))
{
//do my work
fs.close();
}
以这种方式,即使我忘记关闭我的流,它也会被最终处理掉,并且无论如何都会被关闭。