C++ YAML:如何编辑/写入 .yaml 文件中的节点

C++ YAML: How to edit/write to a node in a .yaml file

本文关键字:yaml 写入 文件 节点 编辑 YAML 何编辑 C++      更新时间:2023-10-16

我正在尝试编写一个函数,该函数将使用yaml-cpp写入/编辑.yaml文件中的节点。我有点让它工作,因为我的代码将编辑本地副本。当我打印出_baseNode时,它显示节点中的值为 5.4。但是,退出该功能并在计算机上检查我的.yaml后,值 5.4 不存在。

这是我的尝试(_baseNode是我班的私人成员):

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