首页 > 解决方案 > 当我尝试将其拉回 C# 时,数据会发生变化

问题描述

我正在尝试保存一个通用列表并使用 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

标签: oopbinarygeneric-list

解决方案


好的,我刚刚发现了问题。显然,如果您在不保存数据的情况下对数据进行了更改(我在“list = (List)formatter.Deserialize(stream);”这行代码中进行了更改),然后如果您尝试再次对其进行序列化,您的 FileStrem are using 通常无法正常工作,因此您必须关闭旧流,然后再次重新打开它或仅键入 stream = File.Open(path, FileMode.Open); 再次。无论如何谢谢 :D


推荐阅读