如何在反序列化出错后停止使用文件
本文关键字:文件 反序列化 出错 | 更新日期: 2023-09-27 18:12:25
我使用的是: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;
}
我已经改变了结构,它无法反序列化这个文件,但在下一步,当我试图再次序列化它时,我得到错误:"这个文件正在被另一个进程使用",我无法访问它。
如何在反序列化出错后停止使用file ?
如果抛出异常,您没有关闭流。使用using
语句:
using (Stream stream = File.Open(filename, FileMode.Open))
{
BinaryFormatter bFormatter = new BinaryFormatter();
return (ObjectToSerialize) bFormatter.Deserialize(stream);
}
这相当于在finally
块中处理流。
这不仅仅是关于反序列化—您应该(几乎1) 始终使用using
语句来处理非托管资源。任何显式调用Close
或Dispose
(在Dispose
实现之外仅仅释放组合资源)都是可疑的。
1非常偶尔你想让一个资源在成功时打开,但如果其他东西失败了就关闭它。