我创建了一个加载文件,以便按顺序跟踪游戏中创建的所有角色。有一个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;
}
}
答案 0 :(得分:1)
与BinaryFormatter
无关。您应该在创建 FileStream
FileMode.Create
选项
指定操作系统应创建新文件。如果是文件 已经存在,它将被覆盖
using (FileStream fs = File.Open("d:\\temp\\a.txt", FileMode.Create))
修改强>
你应该分两步完成。使用FileMode.Open
反序列化。然后使用FileMode.Create
覆盖现有数据。