Данные меняются, когда я пытаюсь вытащить их обратно C # - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь сохранить общий список и получить его обратно с помощью BinaryFormatter, но я не могу получить список в сохраненной форме, он возвращает мне только первый элемент в списке. Я думаю, что может быть ошибка, пока код пытается не перезаписать файл. Если вам нужно больше деталей, пожалуйста, сообщите мне, и я добавлю детали, которые вам нужны.

    #region Save
    /// <summary>
    /// Saves the given object to the given path as a data in a generic list.
    /// </summary>
    protected static void Save<T>(string path, object objectToSave)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        FileStream stream;
        if (!File.Exists(path))
        {
            stream = File.Create(path);
        }
        else
        {
            stream = File.Open(path, FileMode.Open);
        }

        List<T> list = new List<T>();

        try
        {
            list = (List<T>)formatter.Deserialize(stream);
        }
        catch
        {

        }

        list.Add((T)objectToSave);

        formatter.Serialize(stream, list);
        stream.Close();
    }
    #endregion

    #region Load
    /// <summary>
    /// Loads the data from given path and returns a list of questions.
    /// </summary>
    protected static List<T> Load<T>(string path)
    {
        if (!File.Exists(path))
        {
            System.Windows.Forms.MessageBox.Show(path + " yolunda bir dosya bulunamadı!");
            return null;
        }

        BinaryFormatter formatter = new BinaryFormatter();
        FileStream stream = File.Open(path, FileMode.Open);
        List<T> newList;

        try
        {
            newList = (List<T>)formatter.Deserialize(stream);
        }
        catch
        {
            newList = null;
        }

        stream.Close();
        return newList;
    }
    #endregion

1 Ответ

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

Окей, я только что понял проблему. Очевидно, что если вы вносите изменения в данные, не сохраняя их (я сделал это в «list = (List) formatter. использование не работает вообще, поэтому вам нужно закрыть старый поток, а затем снова открыть его или другой или просто набрать stream = File.Open (path, FileMode.Open); снова. В любом случае, спасибо: D

...