C++ YAML:如何 edit/write 到 .yaml 文件中的节点
C++ YAML: How to edit/write to a node in a .yaml file
我正在尝试编写一个函数,它将 write/edit 我的 .yaml
文件中的一个节点使用 yaml-cpp
。我有点让它工作,因为我的代码将编辑本地副本。当我打印出 _baseNode
时,它显示该节点的值为 5.4。但是,退出函数并在我的计算机上检查我的 .yaml
后,值 5.4 不存在。
这是我的尝试(_baseNode
是我的 class 的私有成员):
void ParametersServerPC::testFunc2() {
boost::filesystem::path path(boost::filesystem::initial_path() / _parameterFileName);
_baseNode = YAML::LoadFile(_parameterFileName);
_baseNode["chip"]["clock_rate"]["3"] = 5.4;
std::cout << _baseNode << std::endl;
}
第二次尝试,我创建了一个 YAML::Node& baseNode
:
YAML::Node& baseNode = YAML::LoadFile(_parameterFileName);
但是我得到这个错误:
invalid initialization of non-const reference of type 'YAML::Node&' from an rvalue of type 'YAML::Node'
对于那些感兴趣的人,.yaml
文件如下所示:
chip:
clock_rate:
0: 1.0
1: 1.0
2: 1.0
3: 3.0
4: 1.0
我想将 3
映射的值从 3.0 更改为 5.4。
就像@filmor 在评论中所说的那样,LoadFile
只是将数据加载到内存中,并不提供文件系统的接口。
因此,编辑.yaml
文件,必须先编辑文件的根节点,然后像这样将其转储回文件中:
YAML::Node node, _baseNode = YAML::LoadFile("file.yaml"); // gets the root node
_baseNode["change"]["this"]["node"] = "newvalue"; // edit one of the nodes
std::ofstream fout("fileUpdate.yaml");
fout << _baseNode; // dump it back into the file
我正在尝试编写一个函数,它将 write/edit 我的 .yaml
文件中的一个节点使用 yaml-cpp
。我有点让它工作,因为我的代码将编辑本地副本。当我打印出 _baseNode
时,它显示该节点的值为 5.4。但是,退出函数并在我的计算机上检查我的 .yaml
后,值 5.4 不存在。
这是我的尝试(_baseNode
是我的 class 的私有成员):
void ParametersServerPC::testFunc2() {
boost::filesystem::path path(boost::filesystem::initial_path() / _parameterFileName);
_baseNode = YAML::LoadFile(_parameterFileName);
_baseNode["chip"]["clock_rate"]["3"] = 5.4;
std::cout << _baseNode << std::endl;
}
第二次尝试,我创建了一个 YAML::Node& baseNode
:
YAML::Node& baseNode = YAML::LoadFile(_parameterFileName);
但是我得到这个错误:
invalid initialization of non-const reference of type 'YAML::Node&' from an rvalue of type 'YAML::Node'
对于那些感兴趣的人,.yaml
文件如下所示:
chip:
clock_rate:
0: 1.0
1: 1.0
2: 1.0
3: 3.0
4: 1.0
我想将 3
映射的值从 3.0 更改为 5.4。
就像@filmor 在评论中所说的那样,LoadFile
只是将数据加载到内存中,并不提供文件系统的接口。
因此,编辑.yaml
文件,必须先编辑文件的根节点,然后像这样将其转储回文件中:
YAML::Node node, _baseNode = YAML::LoadFile("file.yaml"); // gets the root node
_baseNode["change"]["this"]["node"] = "newvalue"; // edit one of the nodes
std::ofstream fout("fileUpdate.yaml");
fout << _baseNode; // dump it back into the file