C# 除第一次外,二进制序列化程序不工作
为什么这段代码只有在第一次调用时才起作用(添加第一个元素)。在后续调用中,文件保持不变,只包含一个用户C# 除第一次外,二进制序列化程序不工作,c#,binaryformatter,C#,Binaryformatter,为什么这段代码只有在第一次调用时才起作用(添加第一个元素)。在后续调用中,文件保持不变,只包含一个用户 public void AddUser(User user) { FileStream stream = new FileStream(PATH_TO_LOGINS, FileMode.OpenOrCreate); BinaryFormatter formatter = new BinaryFormatter(); Lis
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();
}
public void AddUser(用户)
{
FileStream stream=新的FileStream(路径到登录名,FileMode.OpenOrCreate);
BinaryFormatter formatter=新的BinaryFormatter();
列表用户=新列表();
如果(stream.Length>0)
users=(列表)格式化程序。反序列化(流);
用户。添加(用户);
序列化(流,用户);
stream.Close();
}
执行序列化之前,添加stream.Position=0
。这样,当您序列化文件时,您就可以从文件的最开始开始开始编写
如果不将其设置为0,则将从文件末尾开始向前写入,因为在执行反序列化之后,FileStream
的当前位置就在这里
users.Add(user);
stream.Position = 0;
formatter.Serialize(stream,users);
在执行序列化之前添加stream.Position=0
。这样,当您序列化文件时,您就可以从文件的最开始开始开始编写
如果不将其设置为0,则将从文件末尾开始向前写入,因为在执行反序列化之后,FileStream
的当前位置就在这里
users.Add(user);
stream.Position = 0;
formatter.Serialize(stream,users);
请出示您的实际代码users
这是一个局部变量,您不会返回,因此它显然只能容纳您添加的一个用户。这是我的实际代码,我每次都添加一个有效的用户对象。如果有更有效的方法,那么,但它是您每次重新创建的局部变量。@500 InternalServerError有什么问题吗?请显示您的实际代码users
这里有一个局部变量,您不能返回,因此它显然只能容纳您添加的一个用户。这是我的实际代码,我每次都添加一个有效的用户对象。这样做有一种更有效的方法,好吧,但它是您每次创建的局部变量。@500 InternalServerError有问题吗?