二进制序列化程序除第一次外不工作

Binary Serializer not working except for first time

为什么这段代码只有在第一次调用时才有效(添加第一个元素)。在随后的调用中,文件保持不变,只包含一个用户

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

在执行序列化之前添加 stream.Position = 0。这样你就可以在序列化文件时从文件的开头开始写入。

如果您不将其设置为 0,您将从文件末尾开始写入并向前,因为它是执行反序列化后 FileStream 当前位置的位置。

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