Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 除第一次外,二进制序列化程序不工作_C#_Binaryformatter - Fatal编程技术网

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有问题吗?