FAQ GTK+Consultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 101, dernière mise à jour : 22 février 2018 Ajouter une question
Cette faq a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.
Je tiens à souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette faq ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci.
Sur ce, nous vous souhaitons une bonne lecture, L'équipe GTK+.
En C standard pour lire un fichier en entier, on est obligé de faire appel à la fonction fgets jusqu'à atteindre la fin du fichier. La glib fournit une fonction qui fait cela :
Code C : | Sélectionner tout |
1 2 3 4 | gboolean g_file_get_contents (const gchar *filename, gchar **contents, gsize *length, GError **error); |
- filename : le chemin du fichier dont on souhaite récupérer le contenu
- contents : pointeur qui contiendra l'adresse d'une zone de mémoire nouvellement allouée qui contiendra le contenu du fichier
- length : la taille de la zone mémoire allouée, ou NULL
- error : récupération d'éventuelles erreurs, ou NULL
- retourne TRUE en cas de succès, FALSE sinon.
La fonction
Code C : | Sélectionner tout |
gboolean g_file_test (const gchar *filename, GFileTest test);
- G_FILE_TEST_IS_REGULAR : est vrai si filename n'est pas un lien symbolique ou un dossier
- G_FILE_TEST_IS_SYMLINK : est vrai si filename est un lien symbolique
- G_FILE_TEST_IS_DIR : est vrai si filename est un dossier
- G_FILE_TEST_IS_EXECUTABLE : est vrai si filename est un fichier exécutable
- G_FILE_TEST_EXISTS : est vrai si filename existe.
Ce test ne doit pas remplacer la vérification du retour de la fonction qui permet d'ouvrir le fichier (fopen par exemple), car le fichier peut être supprimé ou modifié entre les deux appels.
Le langage C standard ne connaît pas la notion de répertoire (car tous les systèmes de fichiers ne les implémentent pas forcément), la glib comble ce vide. Voici un exemple pour lister le contenu d'un répertoire :
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | GDir *dir = g_dir_open (".", 0, NULL) if (dir) { const gchar *filename = NULL; printf ("Contenu du dossier :"); while (filename = g_dir_read_name (dir)) { printf ("%s\n", filename); } g_dir_close (dir), dir = NULL; } |
L'ordre dans lequel les fichiers sont listés dépend du système.
Créer un nouveau GKeyFile :
Code C : | Sélectionner tout |
1 2 3 4 5 | #include <glib.h> GKeyFile *p_key_file; p_key_file = g_key_file_new (); |
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | GError *p_error = NULL; if (! g_key_file_load_from_file ( p_key_file, "sample_config.ini", G_KEY_FILE_KEEP_COMMENTS, &p_error)) { /* Error, exit program. */ g_warning ("Impossible to load config file : %s\n", p_error->message); g_error_free (p_error); exit (EXIT_FAILURE); } |
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | gchar *s_name; gchar *s_sex; gint age; s_name = g_key_file_get_string (p_key_file, "Person", "name", NULL); s_sex = g_key_file_get_string (p_key_file, "Person", "sexe", NULL); age = g_key_file_get_integer (p_key_file, "Person", "age", NULL); if (s_name != NULL) { g_print ("\nName: %s\n", s_name); } if (s_sex != NULL) { g_print ("Sexe: %s\n", s_sex); } g_print ("Age: %d\n\n", age); g_free (s_name); g_free (s_sex); |
Code C : | Sélectionner tout |
1 2 3 | g_key_file_set_string (p_key_file, "Person", "name", "Angelina"); g_key_file_set_string (p_key_file, "Person", "sexe", "female"); g_key_file_set_integer (p_key_file, "Person", "age", 20); |
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | gchar *s_data; gsize size; /* ----- Convert data to string */ s_data = g_key_file_to_data (p_key_file, &size, &p_error); if (!s_data) { /* Error, exit program. */ g_warning ("Impossible to convert data to string : %s\n", p_error->message); g_error_free (p_error); exit (EXIT_FAILURE); } |
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | gboolean b_ret; b_ret = g_file_set_contents ("sample_config.ini", s_data, size, &p_error); g_free (s_data); if (!b_ret) { /* Error, exit program. */ g_warning ("Impossible to write config file : %s\n", p_error->message); g_error_free (p_error); exit (EXIT_FAILURE); } |
Code C : | Sélectionner tout |
g_key_file_free (p_key_file);
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.