【发布时间】:2021-12-26 00:38:19
【问题描述】:
我想将boost::property_tree::ptree 二进制文件写入文件,然后再次将其读入ptree。
因为我对 ptree 和二进制写入/读取它们不太满意。我认为你们可以引导我走向正确的方向。
编写字符串,int/float/double 不是什么大问题,但是如何将整个 ptree(具有未知的键和值,因此它是通用的)存储到文件中并使用 if-/ 在 cpp 中读回它流的?
Filer 扩展名将是“*.tgasset”,并且文件将包含比 ptree 更多的数据。
为了让我更容易..这些是我写入/读取数据的虚拟函数:
void TGS_File::PTreeToFile(std::ofstream &_file, boost::property_tree::ptree _data) {
}
boost::property_tree::ptree TGS_File::PTreeFromFile(std::ifstream &_file) {
boost::property_tree::ptree _data;
return _data;
}
(以同样的方式使用字符串、整数、浮点数和双精度数)
【问题讨论】:
-
读/写应该是二进制的 if-/ofstream,因为 ptree 不是这个文件中唯一的数据,稍后。意思是,我不能使用 XML 和 json 解析器。
-
@BDC_Patrick 问题可能归结为将所有内容映射到 POC,它可以简单地以二进制格式存储。这是一件很难的事情,特别是在使用任何指针链接的情况下。您可能会更好,为您的类类型提供适当的 json 或 XML 解析器并使用映射器。
-
ptree 数据仅由 std::string、int、float、double 和 bools 等类型组成。没有指针,只是普通数据。想过遍历键/路径并将它们+值写入文件..但不知道如何。
-
是的,这就是我说的原因。您需要一个合适的映射器类,
std::string不是 POD 类型,可以直接序列化为二进制文件。 -
是的。我的 StringToFile 函数从字符串中创建一个 char* 缓冲区并将其存储在文件中????。好的..会搜索那个。
标签: c++ boost ifstream ofstream ptree