2016-05-31 5 views
0

Почему этот код работает только в том случае, если он вызывается в первый раз (добавляет первый элемент). В последующих вызовах, файл остается неизменным, содержащий только один пользовательДвоичный сериализатор не работает, кроме первого раза

 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

это мой фактический код, я добавляю действительный объект пользователя каждый раз –

+0

Surley есть более эффективный способ сделать это – Needham

ответ

3

Добавить stream.Position = 0 прежде чем выполнять сериализацию. Таким образом, вы начинаете писать с самого начала файла при его сериализации.

Если вы не установили его в 0, вы начнете писать с конца файла и переадресовываете, так как здесь находится позиция FileStream после выполнения десериализации.

users.Add(user); 
stream.Position = 0; 
formatter.Serialize(stream,users); 
Смежные вопросы