Oop 当我试图将数据拉回到C时,数据会发生变化#

Oop 当我试图将数据拉回到C时,数据会发生变化#,oop,binary,generic-list,Oop,Binary,Generic List,我试图保存一个通用列表,并使用BinaryFormatter将其取回,但我无法以我保存的格式获取该列表,它只返回列表中的第一项。我认为代码试图不覆盖文件时可能会出错。如果您需要更多详细信息,请告诉我,我将添加您需要的详细信息 #region Save /// <summary> /// Saves the given object to the given path as a data in a generic list. /// </summa

我试图保存一个通用列表,并使用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
#区域保存
/// 
///将给定对象作为通用列表中的数据保存到给定路径。
/// 
受保护的静态无效保存(字符串路径、对象对象保存)
{
BinaryFormatter formatter=新的BinaryFormatter();
文件流;
如果(!File.Exists(path))
{
stream=File.Create(路径);
}
其他的
{
stream=File.Open(路径,FileMode.Open);
}
列表=新列表();
尝试
{
列表=(列表)格式化程序。反序列化(流);
}
抓住
{
}
添加((T)objectToSave);
序列化(流、列表);
stream.Close();
}
#端区
#区域负荷
/// 
///从给定路径加载数据并返回问题列表。
/// 
受保护的静态列表加载(字符串路径)
{
如果(!File.Exists(path))
{
System.Windows.Forms.MessageBox.Show(路径+“yolunda bir dosya bulumanadı!”;
返回null;
}
BinaryFormatter formatter=新的BinaryFormatter();
FileStream stream=File.Open(路径,FileMode.Open);
列表新建列表;
尝试
{
newList=(列表)格式化程序。反序列化(流);
}
抓住
{
newList=null;
}
stream.Close();
返回newList;
}
#端区

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