我在C#中创建了一个序列化对象(例如student),并以这种方式将其保存为二进制文件:
public static void WriteToBinaryFile<T>(string filePath, T objectToWrite,
bool append = false)
{
using (Stream stream = File.Open(filePath, append ? FileMode.Append :
FileMode.Create))
{
var binaryFormatter = new
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
binaryFormatter.Serialize(stream, objectToWrite);
}
}
所以现在我想更改学生的名字并保存已编辑的学生对象,但我不想删除以前的文件并替换以前编辑的新文件,但我只是想应用更改原始文件。
这就像我想改变一个人的名字,而不是杀死他!并创建一个类似于原始人但具有新名称的人。
答案 0 :(得分:0)
您无法编辑二进制序列化对象。您必须对其进行反序列化才能编辑任何内容。
让我建议一种替代方法。如果您只是在将学生数据保存到文件中以便以后加载和使用它,则可以将序列化方法从二进制更改为XML(Serialize an object to XML)XML格式允许您查找和编辑文件中的特定字段,因为它将以简单的“原样”形式保存。然后你可以编辑它,而无需将所有内容加载到内存中,并最终覆盖原始文件(Replace part of large XML file)这篇博文有一个具体的例子:https://blogs.msdn.microsoft.com/mfussell/2005/02/12/combining-the-xmlreader-and-xmlwriter-classes-for-simple-streaming-transformations/