BinaryFormatter:SerializationException [英] BinaryFormatter: SerializationException

查看:171
本文介绍了BinaryFormatter:SerializationException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm using BinaryFormatter to load & save my treeView. I want to prevent errors if destination file doesn't exist. My code:

        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并在以后保存它,我会收到该文件被其他程序使用的错误消息.

If I'll manually delete file, it should create new file, called same as previous one. The problem is that when it reaches object obj = bf.Deserialize(file);, error appears Attempting to deserialize an empty stream.. My guess is that the new file is missing some binary structures or something, but still I'm not sure how to solve it. And if I'll try to add node to the treeView and save it later, I'm getting error that file is used by other program.

推荐答案

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);
    }

}

这篇关于BinaryFormatter:SerializationException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆