當我假設我的應用程序正在更新文件時,機器電源被切斷。當重新打開並且我的應用程序啓動時,它試圖反序列化文件。對Serializer.Deserialize
的調用沒有失敗,但結果對象具有每個屬性的默認值。使用Protobuf-net恢復損壞的文件序列化
我的文件更新/保存:
using (FileStream theStream = File.Open(fileName + "_tmp", FileMode.Create)) {
ProtoBuf.Serializer.Serialize<MyObject>(theStream, inObjectToSerialize);
}
File.Copy(fileName + "_tmp", fileName, true);
沒有_TMP文件,只要主文件。該文件的大小非零,這使我相信信息是完整的。有沒有辦法恢復這些數據?
更新:
我已經試過了馬克與ProtoReader建議和問題的文件導致異常的reader.ReadFieldHeader()
的拋出。 ProtoException讀道:「源數據中的無效字段:0」
是(編輯)馬上?或者如果不是:通過多遠?如果接近尾聲,可以使用構造函數限制讀取的數量。文件有多大?如果你能夠共享文件,我可能會使用格式知識來恢復更多的「直到它爆炸」,我無法承諾。 –
@MarcGravell它馬上就會發生。我將彙集一個示例項目,以便您可以看到我正在處理的事情。 –