Без повторного открытия файла содержимое целых чисел меняется с момента последней их сериализации. - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь сохранить более старые данные, но кажется, что сохранение не работает или данные меняются после сериализации.

Я просмотрел каждый сценарий и поместил консольные сообщения в каждый, открывающий файл (из которых только 2), и ничто не открывает файл между тем, когда я сериализую его, и когда я открываю его и получаю разные данные .

Это код, который сериализует новую информацию

BinaryFormatter binaryFormatter = new BinaryFormatter();
            FileStream file = File.Open(Application.persistentDataPath + "/" + SceneManager.GetActiveScene().name + "Checkpoint.dat", FileMode.Open);
            CheckpointData data = (CheckpointData)binaryFormatter.Deserialize(file);
            data.Checkpoint = CheckpointNumber;
            Player.CheckpointNumber = CheckpointNumber;
            if (data.CheckpointUnlocked == CheckpointNumber - 1)
            {
                Player.CheckpointUnlocked = CheckpointNumber;
                data.CheckpointUnlocked = CheckpointNumber;
            }
            binaryFormatter.Serialize(file, data);
            file.Close();

Это то, что открывает файл после перезагрузки сцены после сериализации данных:

            BinaryFormatter binaryFormatter = new BinaryFormatter();
            FileStream file = File.Open(Application.persistentDataPath + "/" + SceneManager.GetActiveScene().name + "Checkpoint.dat", FileMode.Open);
            CheckpointData data = (CheckpointData)binaryFormatter.Deserialize(file);
            CheckpointNumber = data.Checkpoint;
            print(data.Checkpoint);
            CheckpointUnlocked = data.CheckpointUnlocked;
            print(data.CheckpointUnlocked);
            file.Close();

Следует изменить целые числа контрольной точки и незаблокированной контрольной точки с 1 на 2, но они снова загружаются как 1 во втором разделе кода.

1 Ответ

0 голосов
/ 27 июня 2019

Хорошо, я нашел проблему.Раньше я использовал File.Create для изменения файла, но когда я хотел получить данные из файла, отредактировать его, а затем сохранить эти данные, я все еще использовал binaryFormatter.Serialize (file, data);Который, похоже, не работает при открытии файла.Либо это, либо вы не можете десериализовать что-то, а затем сериализовать это потом.Однажды я изменил код, чтобы никогда не использовать десериализацию в первом примере, и я использовал file.Create вместо file.Open.Я предполагаю, что, вероятно, есть способ сделать это с записью в файл вместо перезаписи, но это работает, и я пойду исследую, как сделать это вместо этого позже.

...