简体   繁体   English

BinaryFormatter:SerializationException

[英]BinaryFormatter: SerializationException

I'm using BinaryFormatter to load & save my treeView. 我正在使用BinaryFormatter来加载和保存我的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);
            }
        }
    }

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); 问题是当它到达object obj = bf.Deserialize(file); , error appears Attempting to deserialize an empty stream. ,出现错误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. 如果我尝试将节点添加到treeView并稍后保存,我收到错误,该文件被其他程序使用。

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

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM