Libconfig изменить значение конфигурации

Я использую libconfig для чтения/записи файлов конфигурации в моей игре на C++.

Прямо сейчас у меня есть только один файл конфигурации с именем video.cfg:

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

Этот файл конфигурации управляет настройками видео в игре.

Я пытаюсь написать очень простую консольную программу, которая изменяет эти значения на основе пользовательского ввода. Однако я понятия не имею, как это сделать. Я ничего не могу найти в руководстве по libconfig и ничего в Google.

Итак, как вы редактируете значения в Libconfig?


person drCoding    schedule 30.04.2012    source источник
comment
вы можете прочитать файл конфигурации с помощью libconfig и изменить значения на основе ввода пользователя и записать их обратно в тот же файл.   -  person deebee    schedule 01.05.2012
comment
Вы читали документы? Есть примеры чтения и записи, поставляемые с libconfig. C API также очень прост. config_read_file и config_write_file, вероятно, вас интересуют. /а>   -  person dgnorton    schedule 01.05.2012


Ответы (2)


#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, прочитайте документацию и обработайте возможные ошибки.

person dgnorton    schedule 01.05.2012
comment
Спасибо за это. Однако я знал о C API, но я прав на C++. Я не думаю, что вы можете смешивать код C и C++ в одном файле. - person drCoding; 01.05.2012
comment
@drCoding: C++ является (более или менее) надмножеством C, поэтому вы можете смешивать код C и C++ в одном файле. Просто не забудьте скомпилировать полученный файл с помощью компилятора C++, а не компилятора C. - person Ciaran McHale; 01.05.2012

Я столкнулся с этим вопросом, когда искал способ заставить 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;
}

Надеюсь, это поможет кому-то!

person lk75    schedule 17.11.2015