2011-10-25 39 views
1

我正在使用:boito = Serializer.DeSerializeObject("XOPC.xml"); with try catch。如何在反序列化出錯後停止使用文件?

所以這裏是方法:

public static ObjectToSerialize DeSerializeObject(string filename) 
    { 
     ObjectToSerialize objectToSerialize; 
     Stream stream = File.Open(filename, FileMode.Open); 
     BinaryFormatter bFormatter = new BinaryFormatter(); 
     objectToSerialize = (ObjectToSerialize)bFormatter.Deserialize(stream); 
     stream.Close(); 
     return objectToSerialize; 
    } 

我已經改變了結構,它的失敗反序列化這個文件,但在接下來的步驟時,我試圖序列一遍我得到錯誤:「該文件是使用其他進程「,我無法訪問它。

那麼如何在反序列化出錯後停止使用文件?

回答

3

如果拋出異常,您不關閉流。使用using聲明:

using (Stream stream = File.Open(filename, FileMode.Open)) 
{ 
    BinaryFormatter bFormatter = new BinaryFormatter(); 
    return (ObjectToSerialize) bFormatter.Deserialize(stream); 
} 

這相當於在finally塊流的處置。

這不只是反序列化 - 你應該對非託管資源(幾乎)總是使用using語句。任何顯式調用CloseDisposeDispose實現之外僅僅釋放組合資源)是可疑的。


非常偶爾要離開一個資源上成功打開,但關閉它,如果別的東西失敗。這是罕見的和尷尬的。