1. 程式人生 > >glib讀寫配置檔案介面

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

執行前配置檔案:

編譯以及執行結果:

執行後配置檔案: