2012-02-17 27 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