注意:我知道在大文件中使用BinaryFormatter
的缺点。但这是我朋友的家庭作业:
(。Net Framework 4)我创建了一个简单的Person
类,它应该被序列化并写入二进制文件中。
Person
对象,关闭文件。我不想序列化List<Person>
并立即全部写出来。 index
参数):打开文件,查找index
位置(基于对象长度),在index
反序列化对象,返回对象。 index
位置读取记录一样,转到索引位置,删除它,保存文件。 我不确定使用BinaryFormatter
是否是正确的方法。例如对于插入,我见过如下例子:
FileStream fs = new FileStream(_fileName, FileMode.Open);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, person);
fs.Close();
导致文件中的所有数据丢失,文件只包含person
对象。如何在文件中以顺序方式对对象进行二进制读/写/删除?我对插入的猜测是使用另一个流,将对象序列化到该流中。将流写入字节数组并使用该字节数组写入主文件流的末尾。但我想不出适合插入/删除操作的方法。是否有更适合的方法而不是BinaryFormatter
?
注意:为了更清楚,他告诉我老师要他们计算每次手术的时间 谢谢。
答案 0 :(得分:2)
除第一行外,您的代码是正确的:
FileStream fs = new FileStream(_fileName, FileMode.Append)
这将允许formatter.Serialize(fs,person)
将自己附加到文件中。
var listFromFile = new List<Person>();
using (var fileStream = new FileStream("C:\file.dat", FileMode.Open))
{
var bFormatter = new BinaryFormatter();
while (fileStream.Position != fileStream.Length)
{
list.Add((Person)bFormatter.Deserialize(fileStream));
}
}
这应该可以从文件中获取列表,就插入而言......在插入新对象并与删除相同时,您可能必须重写对象。