二进制序列化器除了第一次没有工作

时间:2016-05-31 22:26:10

标签: c# binaryformatter

为什么此代码仅在第一次调用时才起作用(添加第一个元素)。在后续调用中,文件保持不变,只包含一个用户

        public void AddUser(User user)
    {
        FileStream stream = new FileStream(PATH_TO_LOGINS, FileMode.OpenOrCreate);
        BinaryFormatter formatter = new BinaryFormatter();
        List<User> users=new List<User>();
        if (stream.Length > 0)
            users = (List<User>) formatter.Deserialize(stream);
        users.Add(user);
        formatter.Serialize(stream,users);
        stream.Close();
    }

1 个答案:

答案 0 :(得分:3)

在执行序列化之前添加stream.Position = 0。这样,当您序列化文件时,就会从文件的最开头开始编写。

如果您没有将其设置为0,那么您将从文件末尾开始编写并转发,因为它位于FileStream位置的当前位置在你执行反序列化之后。

users.Add(user);
stream.Position = 0;
formatter.Serialize(stream,users);