BinaryFormatter:SerializationException

时间:2013-07-19 18:29:58

标签: c# visual-studio-2010 serialization binaryformatter

我正在使用BinaryFormatter加载&保存我的treeView。如果目标文件不存在,我想防止错误。我的代码:

        public static void Load(TreeView tree, string filename)
    {
        if (!File.Exists(filename))
        {
            Stream file = File.Create(filename);
            return;
        }
        else
        {

            using (Stream file = File.Open(filename, FileMode.Open))
            {
                BinaryFormatter bf = new BinaryFormatter();
                object obj = bf.Deserialize(file);

                TreeNode[] nodeList = (obj as IEnumerable<TreeNode>).ToArray();
                tree.Nodes.AddRange(nodeList);
            }
        }
    }

如果我手动删除文件,它应该创建一个新文件,与前一个文件相同。问题是,当它达到object obj = bf.Deserialize(file);时,会出现错误Attempting to deserialize an empty stream.。我的猜测是新文件缺少一些二进制结构或其他东西,但我仍然不确定如何解决它。 如果我尝试将节点添加到treeView并稍后保存,我收到错误,该文件被其他程序使用。

1 个答案:

答案 0 :(得分:2)

public static void Load(TreeView tree, string filename)
{
    using (var file = File.Open(filename, FileMode.OpenOrCreate))
    {
        if (file.Length.Equals(0))
            return;

        var bf = new BinaryFormatter();
        var obj = bf.Deserialize(file);
        var nodeList = (obj as IEnumerable<TreeNode>).ToArray();
        tree.Nodes.AddRange(nodeList);
    }

}