BinaryFormatter似乎是在追加而不是覆盖

时间:2015-04-04 22:26:33

标签: c# .net-4.0 binary-serialization

我创建了一个加载文件,以便按顺序跟踪游戏中创建的所有角色。有一个15个字符的限制,所以每当玩家创建一个新角色时,我需要检查是否达到了这个限制。但是,当我尝试修改加载文件中的对象容器并再次序列化时,我最终将我的字符索引返回到0。任何人都可以看到我的错误吗?

BinaryFormatter binForm = new BinaryFormatter();

            //check load data file and add new player to the list if char limit is not reached
            using (FileStream fs = File.Open("./saves/loadData.vinload", FileMode.Open))
            {
                PlayerLoadData pLoad = (PlayerLoadData)binForm.Deserialize(fs);
                Debug.Log(pLoad.charIndex);
                if (pLoad.charIndex < 15)
                {
                    pLoad.names[pLoad.charIndex] = finalName;
                    pLoad.charIndex += 1;
                    /*
                    Debug.Log(pLoad.charIndex);
                    foreach(string n in pLoad.names)
                    {
                        Debug.Log(n);
                    }*/

                    binForm.Serialize(fs, pLoad);
                }
                else
                {
                    manifestScenePopups.TooManyChars();
                    return;
                }
            }

1 个答案:

答案 0 :(得分:1)

BinaryFormatter无关。您应该在创建 FileStream

时使用FileMode.Create选项
  

指定操作系统应创建新文件。如果是文件   已经存在,它将被覆盖

using (FileStream fs = File.Open("d:\\temp\\a.txt", FileMode.Create))

修改

你应该分两步完成。使用FileMode.Open反序列化。然后使用FileMode.Create覆盖现有数据。