从 CArchive 文件中检索信息

Posted

技术标签:

【中文标题】从 CArchive 文件中检索信息【英文标题】:Retrieve information from CArchive File 【发布时间】:2021-09-01 16:30:21 【问题描述】:

如果我们不知道CArchive 文件中存储了哪些类型的对象,有什么方法可以从CArchive 文件中检索信息?

我想知道CArchive文件中存储的信息格式是什么。

请帮帮我。

【问题讨论】:

CArchive 类有一个底层文件对象,并且该文件(通常)是二进制格式。所以,除非你对它的内容有所了解某些东西,否则它只是gobbledegook。 我会在二进制编辑器中打开该文件,看看您是否可以识别其中的任何字符串。如果该存档是使用 MFC 的可序列化 CObject 派生的东西创建的,您可能会看到类名。运气好的话 一个存档文件给了我。我不知道它包含什么类型的信息。无法从该存档文件中检索信息? 【参考方案1】:

文件格式记录在TN002: Persistent Object Data Format 下。虽然这解释了如何在数据流中识别对象以进行反序列化,但将数据转储到CArchive 并读回它的实际逻辑由使用@987654324 的类的CObject 派生类实现自行决定@ 和 IMPLEMENT_SERIAL 宏。

如果没有实际的(反)序列化代码,您对二进制 CArchive 流几乎无能为力,除非生成它的实现始终使用标准序列化方法,让您猜测存储的数据类型。

与 JSON 或 XML 不同,CArchive 的序列化数据不是自描述的。即使您知道任何给定数据的类型,文件中也没有包含任何语义信息的内容。

【讨论】:

以上是关于从 CArchive 文件中检索信息的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 CArchive 中引用的文件的大小?

反序列化在 java 中使用 mfc CArchive 创建的文件

从 CArchive 读取 WORD 变量并同时转换为 int

CFile与CArchive区别

文件序列化

读取使用 CArchive Ar(&SaveDataStoreDetail, CArchive::store) 存储的数据;