2014-10-07 66 views
0

我使用代码娄数据序列化为myObject的释放资源并安全地删除文件

public static void SerializeObject(string filename, MyObject objectToSerialize) 
{ 
     Stream stream = File.Open(filename, FileMode.Create); 
     BinaryFormatter bformatter = new BinaryFormatter(); 
     bformatter.Serialize(stream, objectToSerialize); 
    stream.Close();     
} 

此代码工作正常,但我有与删除临时文件的问题(这里作为参数(文件名) )。

我假设问题出现在上面的这个方法代码中,那么我该如何释放此代码使用的任何资源,以便我可以删除文件。

+6

首先,这不是防御性编码。 “使用”在哪里,以确保即使某些事情失败等情况下,“流”也会关闭。其次,您为什么首先通过临时文件传递数据?另外,你的描述是错误的,你实际上是将对象序列化为一个文件,而不是相反。 – Luaan 2014-10-07 12:57:31

回答

1

我没有删除该文件,当我想你的程序的任何问题,但我认为你应该使用下列内容:

public static void SerializeObject(string filename, MyObject objectToSerialize) 
{ 
    var stream = File.Open(filename, FileMode.Create); 
    BinaryFormatter bformatter = new BinaryFormatter(); 
    bformatter.Serialize(stream, objectToSerialize); 
    stream.Close();     
} 

我不知道该转换成流一个FileStream引起的任何问题,它可能不会。

但是,因为它可以确保流被正常关闭,这甚至可能更容易,更傻瓜证明:

public static void SerializeObject(string filename, Object objectToSerialize) 
    { 
     using (var stream = File.Open(filename, FileMode.Create)) 
     { 
      BinaryFormatter bformatter = new BinaryFormatter(); 
      bformatter.Serialize(stream, objectToSerialize); 
     } 
    } 

如果你找到一个方法来重现您的问题,让我知道:正如我所说的,我在执行你的功能并且仍然运行这个程序之后可能会删除这个文件,所以我不能重现你的问题。