programmazione:glib:parser_ini_files
Parser per file .ini
Autore: Fabio Di Matteo
Ultima revisione: 16/03/2016 - 15:32
La libreria glib (parte integrante del pacchetto GTK+) possiede una serie di funzioni per gestire file di testo .INI di solito usati per i file di configurazione delle applicazioni. Qui di seguito vedremo un esempio base per capire come utilizzare queste funzioni.
File INI per il test
Il nostro file .ini usato per il test.
pref.conf
[MioGruppo1] chiave1=testo chiave1 modificato ancora chiave2=testo-della-chiave-numero-due chiave3=testo-della-chiave-numero-tre [MioGruppo2] chiave4=testo-della-chiave-numero-quattro chiave5=testo-della-chiave-numero-cinque
Codice
main.c
#include <glib.h> char* GetKey(gchar* file, const gchar* group ,const gchar* key) { //Una varibile per gli eventuali errori GError *error=NULL; //Mi preparo a leggere il file con le chiavi GKeyFile * mykey = g_key_file_new(); g_key_file_load_from_file (mykey, file, G_KEY_FILE_KEEP_COMMENTS, &error); gchar* myval= g_key_file_get_value (mykey, group, key, &error); g_key_file_free (mykey); //Gestisco eventuali errori di lettura if (error!=NULL) { g_print("Errore : %s\n",error->message); return NULL; } return myval; } void* SetKey(gchar* file, const gchar* group , const gchar* key, const gchar* content) { //Una varibile per gli eventuali errori GError *error=NULL; //Mi preparo a leggere il file con le chiavi GKeyFile *mykey = g_key_file_new(); g_key_file_load_from_file (mykey, file, G_KEY_FILE_KEEP_COMMENTS, &error); //Scrivo la chiave (immagine in memoria, non scritta sul file) g_key_file_set_string(mykey, group, key, content); //Adesso scrivo il file CONFFILE gsize size; gchar* data = g_key_file_to_data (mykey, &size, &error); g_file_set_contents (file, data, size, &error); //Faccio pulizia delle strutture non piu' necessarie; g_free (data); g_key_file_free (mykey); //Gestisco eventuali errori di lettura if (error!=NULL) { g_print("Errore : %s\n",error->message); return NULL; } } int main (int argc, char *argv[]) { //Inizializzo i tipi di glib g_type_init(); //Setto il valore della chiave numero 1 SetKey("miofile.conf","MioGruppo1" ,"chiave1", "testo chiave1 modificato ancora"); //Leggo i valori delle chiave numero 1 e numero 5 g_print("%s\n",GetKey("miofile.conf","MioGruppo1","chiave1")); g_print("%s\n",GetKey("miofile.conf","MioGruppo2","chiave5")); return 0; }
makefile
CPP = gcc OPTS = `pkg-config --cflags --libs gio-2.0` all: $(CPP) main.c -o main $(OPTS) clean: rm main
programmazione/glib/parser_ini_files.txt · Ultima modifica: 08/05/2025 10:02 da 127.0.0.1