FAQ GTK+Consultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 101, dernière mise à jour : 30 septembre 2008  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+.


SommaireGlibLa gestion des fichiers (4)
précédent sommaire suivant
 

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.

Mis à jour le 16 novembre 2006 sub_khaine

La fonction

Code C : Sélectionner tout
gboolean g_file_test (const gchar *filename, GFileTest test);
Permet d'effectuer des tests sur les fichiers. Le paramètre test peut prendre l'une ou une combinaison (avec l'opérateur ou binaire : |) des valeurs suivantes :

  • 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.

Mis à jour le 16 novembre 2006 sub_khaine

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; 
}
Les répertoires . et .. sont omis.

L'ordre dans lequel les fichiers sont listés dépend du système.

Mis à jour le 16 novembre 2006 sub_khaine

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 ();
Charger un fichier existant :

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); 
}
Lire une donnée :

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);
Modifier les données :

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);
Convertir le fichier sous forme d'une chaîne de caractères :

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); 
}
Enregistrer les modifications dans un fichier :

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); 
}
Libération des ressources :

Code C : Sélectionner tout
g_key_file_free (p_key_file);

Mis à jour le 16 novembre 2006 P'tit Pack

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2017 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.

 
Contacter le responsable de la rubrique GTK+