2016-05-31 17 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

実際のコードを表示してください。ここの 'users'はあなたが返さないローカル変数ですので、あなたが追加する1人のユーザだけを保持できます。 –

+0

それは私の実際のコードです、私は有効なユーザオブジェクトを毎回追加します –

+0

Surleyこれを行うより効果的な方法があります。 – Needham

答えて

3

あなたはシリアル化を実行する前にstream.Position = 0を追加を含む、同じままです。そうすれば、ファイルの最初から書き込みを開始します。

0に設定しないと、ファイルの最後から書き込みが始まります。これは、逆シリアル化を実行した後に現在FileStreamの位置があるためです。

users.Add(user); 
stream.Position = 0; 
formatter.Serialize(stream,users); 
関連する問題