如何在反序列化出错后停止使用文件



我使用的是: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语句来处理非托管资源。任何显式调用CloseDispose(在Dispose实现之外仅仅释放组合资源)都是可疑的。


1非常偶尔你想让一个资源在成功时打开,但如果其他东西失败了就关闭它。

最新更新