1

我想将boost::property_tree::ptree二进制文件写入文件,然后再次将其读入ptree.

因为我对 ptree 和二进制写/读它们不太满意。我认为你们可以引导我走向正确的方向。

写入字符串,int/float/double 不是什么大问题,但是如何将整个 ptree(具有未知的键和值,所以它是通用的)存储到文件中并使用 if-/ofstream 在 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;
}

(以同样的方式使用字符串、整数、浮点数和双精度数)

4

1 回答 1

0

您必须选择一种格式:INI、Json、XML 或 INFO。每个都有自己的限制:https ://www.boost.org/doc/libs/1_77_0/doc/html/property_tree/parsers.html

例如,如果您选择 JSON:

#include <boost/property_tree/json_parser.hpp>

void TGS_File::PTreeToFile(std::ofstream &_file, boost::property_tree::ptree _data) {
     write_json(_file, _data);
}

boost::property_tree::ptree TGS_File::PTreeFromFile(std::ifstream &_file) {
    boost::property_tree::ptree _data;
    read_json(_file, _data);
    return _data;
}

其他格式的过程与 99% 相同。粗略地说(从记忆中),我认为 INFO 格式在往返过程中丢失的信息量最少。

于 2021-11-14T17:35:38.733 回答