2012-04-30 4 views
0

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

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

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

Этот конфигурационный файл обрабатывает видео настройки игры.

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

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

+0

вы можете прочитать конфигурационный файл с помощью libconfig и изменить значения на основе ввода пользователя и записать его обратно в тот же файл. – deebee

+0

Вы читали документы? Есть примеры чтения и записи, которые поставляются с libconfig. API C также очень прост. 'config_read_file' и' config_write_file', вероятно, вас интересует. http://www.hyperrealm.com/libconfig/libconfig_manual.html – dgnorton

ответ

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

+0

Спасибо за это. Однако я знал о C API, но я исправляю на C++. Я не думаю, что вы можете смешивать код C и C++ в том же файле. – drCoding

+0

@drCoding: C++ является (более или менее) надмножеством C, поэтому вы можете указать код C и C++ в том же файле. Просто не забудьте скомпилировать полученный файл с компилятором C++ вместо компилятора C. –

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; 
} 

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

Смежные вопросы