====== 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 [[https://developer.gnome.org/glib/2.30/glib-Key-value-file-parser.html|serie di funzioni]] per gestire file di testo [[http://it.wikipedia.org/wiki/File_INI|.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 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