glib讀寫配置檔案介面
原始碼:
#include <stdio.h>
#include <glib.h>
int main()
{
gchar *conf_file, *conf;
GKeyFile *keyfile = NULL;
GError *error = NULL;
gchar **keys = NULL;
gsize nkeys, i;
/*建立物件*/
keyfile = g_key_file_new();
/*開啟配置檔案/root/.config/spicy/setting*/
/*g_get_user_config_dir() ==== /root/.config/*/
conf_file = g_build_filename(g_get_user_config_dir(), "spicy", "settings", NULL);
if (!g_key_file_load_from_file(keyfile, conf_file,
G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, &error)) {
g_clear_error(&error);
}
/*讀取配置檔案的general類別有幾個小欄位*/
keys = g_key_file_get_keys(keyfile, "general", &nkeys, &error);
g_print("%d\n", nkeys);
for (i = 0; i < nkeys; ++i) {
g_print("%s\n", keys[i]);
}
/*獲取gt類別下的abc欄位的string*/
gchar *str = g_key_file_get_string(keyfile, "gt", "abc", &error);
g_print("%s\n", str);
g_free(str);
/*獲取ui類別下的toolbar欄位的bool*/
gboolean state = g_key_file_get_boolean(keyfile, "ui", "toolbar", &error);
if (state)
g_print("true\n");
/*這邊是寫配置到keyfile中*/
g_key_file_set_boolean(keyfile, "gt", "def", 0);
g_key_file_set_string(keyfile, "gt", "abc", "hi");
/*keyfile寫入配置檔案*/
if ((conf = g_key_file_to_data(keyfile, NULL, &error)) == NULL ||
!g_file_set_contents(conf_file, conf, -1, &error)) {
g_error_free(error);
error = NULL;
}
/*銷燬*/
g_free(conf);
g_free(conf_file);
g_key_file_free(keyfile);
return 0;
}
執行前配置檔案:
編譯以及執行結果:
執行後配置檔案: