0

我正在使用 libconfig 在我的 C++ 游戏中读取/写入配置文件。

现在我只有一个名为 video.cfg 的配置文件:

#Video config file
video:
{
    fps:
    {
      limited = true;
      value = 20;
    };
};

此配置文件处理游戏的视频设置。

我正在尝试编写一个非常基本的控制台程序,该程序根据用户输入修改此值。但是我不知道该怎么做。我在 libconfig 手册中找不到任何内容,在 Google 上也找不到任何内容。

那么如何在 Libconfig 中编辑值呢?

4

2 回答 2

4
#include <libconfig.h>

int main() {
   config_t cfg;
   config_setting_t *vid_fps_lim = 0;
   config_setting_t *vid_fps_val = 0;

   config_init(&cfg);

   if (config_read_file(&cfg, "myconfig") == CONFIG_TRUE) {

      /* lookup the settings we want */
      vid_fps_lim = config_lookup(&cfg, "video.fps.limited");
      vid_fps_val = config_lookup(&cfg, "video.fps.value");

      /* print the current settings */
      printf("video.fps.limited = %i\n", config_setting_get_bool(vid_fps_lim));
      printf("video.fps.value = %i\n", config_setting_get_int(vid_fps_val));

      /* modify the settings */
      config_setting_set_bool(vid_fps_lim, 1);
      config_setting_set_int(vid_fps_val, 60);

      /* write the modified config back */
      config_write_file(&cfg, "myconfig");
   }

   config_destroy(&cfg);

   return 0;
}

我将文件命名为“lcex.c”,将配置文件命名为“myconfig”,它使用以下命令在我的 Debian Linux 机器上构建和运行...

gcc `pkg-config --cflags libconfig` lcex.c -o lcex `pkg-config --libs libconfig`

./lcex

运行应用程序后打开配置文件,您应该会看到值已更新。

免责声明...省略了错误处理以使其更易于阅读。我没有使用 -Wall 等进行构建。与任何 API 一样,请阅读文档并处理潜在错误。

于 2012-05-01T02:56:12.137 回答
1

我在寻找一种让 libconfig 将输出写入字符串而不是文件的方法时遇到了这个问题。我看到这里没有可接受的答案,所以我想我会为后代提供一个,即使这个问题已经超过 3 年了。

#include <stdint.h>
#include <string>

#include "libconfig.h++"

int32_t
main (void) {
    libconfig::Config config;
    std::string file = "test.conf";

    try {
        config.readFile(file.c_str());

        libconfig::Setting &limited = config.lookup("video.fps.limited");
        libconfig::Setting &value = config.lookup("video.fps.value");

        limited = false;
        value = 60;

        config.writeFile(file.c_str());
    }
    catch (...) {
        // Do something reasonable with exceptions here.  Do not catch (...)
    }

    return 0;
}

希望对某人有所帮助!

于 2015-11-17T22:37:18.613 回答