C# 如何查找磁盘上使用BinaryFormatter序列化的文件的第n条记录
我需要覆盖包含相同对象的文件中的特定记录,该文件以前是使用BinaryFormatter序列化的 如何将流位置提前到第n个记录,然后仅覆盖该记录C# 如何查找磁盘上使用BinaryFormatter序列化的文件的第n条记录,c#,.net,C#,.net,我需要覆盖包含相同对象的文件中的特定记录,该文件以前是使用BinaryFormatter序列化的 如何将流位置提前到第n个记录,然后仅覆盖该记录 或者,换一种说法,我如何确定序列化的每个对象的增量“Seek”。我找到了一种方法来确定当要移动到第n条记录时,每个记录的Seek位置必须移动的大小: 假设传递给下面的SerializedObjectSize函数的文件fileName最初是使用二进制格式化程序序列化为目标对象文件的,则该函数将返回随机访问磁盘/流上文件内任何记录所需的搜索增量 long
或者,换一种说法,我如何确定序列化的每个对象的增量“Seek”。我找到了一种方法来确定当要移动到第n条记录时,每个记录的Seek位置必须移动的大小: 假设传递给下面的SerializedObjectSize函数的文件fileName最初是使用二进制格式化程序序列化为目标对象文件的,则该函数将返回随机访问磁盘/流上文件内任何记录所需的搜索增量
long SerializedObjectSize(string fileName) {
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
var bf = new BinaryFormatter();
var discardObject = (Target)bf.Deserialize(fs);
return fs.Position;
}
}
有点难说,因为很难提前知道记录的大小。您最好使用protobufy您可能需要检查,因为通常在第一次序列化类型时,会写出额外的类型信息,从而使第一条记录比其他记录大。它可能取决于所使用的序列化程序和格式化程序