如何覆盖二进制文件中的一个对象?

时间:2016-03-25 23:03:17

标签: c# object serialization binaryfiles

在这种情况下,我必须通过二进制文件专门进行用户注册,所以不幸的是,我必须这样做。 C#。

我已设置用户注册,以便将用户对象附加到.bin文件的末尾。用户登录将此文件中的所有用户收入列表,并搜索具有相同用户名和密码的用户。但是,我希望我的用户能够编辑他们的配置文件,所以我想要一个将其对象重新保存到文件的功能。这就是我现在所拥有的:

BinaryFormatter bFormatter = new BinaryFormatter();
using (Stream bFile = File.Open("../../data/UserData.bin", FileMode.Append))
{
    bFormatter.Serialize(bFile, Settings.User);
}

当然,虽然这只会将更新的对象附加到文件的末尾,但是会留下相同对象的2个版本吗?任何有关如何进行此操作的建议,以便更新二进制文件中的现有对象?

1 个答案:

答案 0 :(得分:1)

您有几个选择:

1)如果您知道该用户对象的特定字节数总是保持不变,那么只需用新数据覆盖这些特定字节。

2)如果每个记录使用的每个字节数和存储在文件中的数量都可以更改,那么您可以用零或空覆盖特定用户记录(字节)并附加新记录。您的文件大小将继续增加。

3)如果每个记录使用的每个字节数和存储在文件中的数量都可以更改,则回读所有数据,修改它并创建一个新的“.bin”文件。

4)如果每个用户记录都是一个设置大小,那么只需覆盖这些字节(即在文件中找到起始位置并覆盖x个字节。