为什么此代码仅在第一次调用时才起作用(添加第一个元素)。在后续调用中,文件保持不变,只包含一个用户
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();
}
答案 0 :(得分:3)
在执行序列化之前添加stream.Position = 0
。这样,当您序列化文件时,就会从文件的最开头开始编写。
如果您没有将其设置为0,那么您将从文件末尾开始编写并转发,因为它位于FileStream
位置的当前位置在你执行反序列化之后。
users.Add(user);
stream.Position = 0;
formatter.Serialize(stream,users);