2012-02-17 61 views
-1

当我尝试在代码隐藏文件中使用以下代码时,它运行成功,但是当我刷新ASP.NET Webform时,它提供了一个已在使用中的文件错误,错误在代码下面给出。XML序列化程序文件已在使用中错误?

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 \项目\数据\最新\ today.xml”。

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

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

错误源

线141:的FileStream FS =新的FileStream(文件名,FileMode.Open);

+0

[XML文件已在使用,请帮帮我]可能的重复(http://stackoverflow.com/questions/9306443/xml-file-already-in-use-please-help-me-out) – 2012-02-17 07:10:36

+1

如果您在两个问题中都看到问题,那么请执行您在http://stackoverflow.com/questions/9306443/xml-file-already-in-use-please-help-me-out – 2012-02-17 07:11:15

+0

中所做的操作我也在写这个文件,然后尝试读取,但在这种情况下,我只是读了这个文件两次,在.NET中这个东西很重要。 – 2012-02-17 07:31:38

回答

1

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

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

我的意思是:

using(var fs=OpenFile(filename)) 
{ 
//do my work 
fs.close(); 
} 
,即使我忘记关闭我的流将最终的处理,将被关闭,反正这种方式

+0

不“使用”已关闭文件? – 2016-12-28 12:28:36