Я попытался использовать двоичный формат как метод сохранения и загрузки всех типов данных в моей игре (учетные записи, оценки), которые представляют собой структуры, содержащие поля и / или списки.Дело в том, что он не перезаписывает и не обновляет данные в файле после сериализации.
Например, я создаю список, содержащий два аккаунта игрока, и сериализую его.Чтобы быть особенно осторожным при тестировании, я десериализован в новый список Playeraccounts.В первый раз данные сериализуются просто отлично, но когда я добавляю другую учетную запись в список и снова сериализую ее, изменения, кажется, не замечаются.Может быть, я искал проблему, но, кажется, я что-то упустил.
Поскольку в нем задействовано много кода, я просто создал простое сохранение и загрузку, а затем попытался перезаписать его с помощью Списка целых чисел, что делает то же самое, поэтому я думаю, что он служит подстановкой.
вот основной код:
string path = Application.persistentDataPath + "/mEs.binary";
FileStream fsWrite = new FileStream(path, FileMode.Append, FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
List<int> input = new List<int> { 1, 2, 3, 4 };
bf.Serialize(fsWrite, input);
fsWrite.Close();
FileStream fsRead = new FileStream(path, FileMode.Open, FileAccess.Read);
List<int> output = (List<int>)bf.Deserialize(fsRead);
fsRead.Close();
print("first entry:");
foreach (int entry in output)
{
print(entry);
//prints 1 to 4
}
input = output;
input.Add(5);
fsWrite = new FileStream(path, FileMode.Append, FileAccess.Write);
bf.Serialize(fsWrite, input); //add the updated List of ints
fsWrite.Close();
fsRead = new FileStream(path, FileMode.Open, FileAccess.Read);
output = (List<int>)bf.Deserialize(fsRead);
print("second entry:");
foreach (int entry in output)
{
print(entry);
//prints 1 to 4 again (instead of 1 to 5)
}