我假设我的应用程序正在更新文件时,机器电源被切断了。当重新打开并启动我的应用程序时,它试图反序列化文件。调用Serializer.Deserialize
没有失败,但生成的对象具有每个属性的默认值。
我的文件更新/保存:
using (FileStream theStream = File.Open(fileName + "_tmp", FileMode.Create)) {
ProtoBuf.Serializer.Serialize<MyObject>(theStream, inObjectToSerialize);
}
File.Copy(fileName + "_tmp", fileName, true);
没有 _tmp 文件,只有主文件。文件的大小不为零,这让我相信信息是完整的。有没有办法恢复这些数据?
更新:
我已经用 ProtoReader 尝试了 Marc 的建议,并且有问题的文件会导致抛出异常reader.ReadFieldHeader()
。ProtoException 读取:“源数据中的无效字段:0”