2016-05-31 10 views
0

이 코드는 처음 호출 될 때만 작동합니다 (첫 번째 요소 추가). 이에 따른 통화에서 파일을 사용하여 직렬화를 수행하기 전에 stream.Position = 0 추가 한 사용자에게처음에는 이진 serializer가 작동하지 않습니다.

 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

실제 코드를 표시하십시오. 여기서'users'는 반환하지 않는 지역 변수이므로 분명히 추가 한 사용자 만 보유 할 수 있습니다. –

+0

그것은 내 실제 코드입니다. 유효한 사용자 객체를 매번 추가합니다. –

+0

Surley 거기에 더 효과가있는 방법이 있습니다. – Needham

답변

3

을 포함, 동일하게 유지됩니다. 그렇게하면 직렬화 할 때 파일의 맨 처음부터 쓰기 시작할 수 있습니다.

0으로 설정하지 않으면 파일의 끝에서부터 쓰기가 시작됩니다. 이는 역 직렬화를 수행 한 후에 현재 FileStream의 위치입니다.

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