Oop 当我试图将数据拉回到C时,数据会发生变化#
我试图保存一个通用列表,并使用BinaryFormatter将其取回,但我无法以我保存的格式获取该列表,它只返回列表中的第一项。我认为代码试图不覆盖文件时可能会出错。如果您需要更多详细信息,请告诉我,我将添加您需要的详细信息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
#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