1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| #include <gtk/gtk.h>
#include <glib.h>
#include <string.h>
#include <stdio.h>
#define REPERTOIRE "rep.data"
typedef struct
{
gchar nom [40];
gchar prenom [40];
gchar telephone [20];
}
bloc;
/*
* Fonctions mises en static car privees dans ce module de compilation,
* a omettre si les fonctions doivent etres publiques !
*/
static gboolean enregistrer_personne (void)
{
gboolean b_ret = TRUE;
bloc personne = { "Dupont", "Francois", "0388885065" };
FILE * p_file = fopen (REPERTOIRE, "wb");
if (p_file != NULL)
{
size_t nbwrite = fwrite (& personne, sizeof (bloc), 1, p_file);
if (nbwrite != 1)
{
b_ret = FALSE;
}
fclose (p_file);
}
return b_ret;
}
static void charger_personne (GtkTextView * p_txt)
{
bloc personne;
FILE * p_file = fopen (REPERTOIRE, "rb");
if (p_file != NULL)
{
size_t nbread = fread (& personne, sizeof (bloc), 1, p_file);
if (nbread == 1)
{
GtkTextBuffer * p_buf = gtk_text_view_get_buffer (p_txt);
gtk_text_buffer_insert_at_cursor (
p_buf, personne.nom, strlen (personne.nom)
);
gtk_text_buffer_insert_at_cursor (p_buf, "\n", 1);
gtk_text_buffer_insert_at_cursor (
p_buf, personne.prenom, strlen (personne.prenom)
);
gtk_text_buffer_insert_at_cursor (p_buf, "\n", 1);
gtk_text_buffer_insert_at_cursor (
p_buf, personne.telephone, strlen (personne.telephone)
);
gtk_text_buffer_insert_at_cursor (p_buf, "\n", 1);
}
fclose (p_file);
}
}
int main (int argc, char ** argv)
{
GtkWidget * p_win = NULL;
GtkWidget * p_txt = NULL;
gtk_init (& argc, & argv);
p_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (p_win), 300, 300);
p_txt = gtk_text_view_new ();
gtk_container_add (GTK_CONTAINER (p_win), p_txt);
g_signal_connect (
G_OBJECT (p_win),
"destroy",
G_CALLBACK (gtk_main_quit),
NULL
);
/*
* Enregistrement d'une personne dans un fichier en mode binaire:
*/
if (enregistrer_personne ())
{
/*
* Chargement du fichier cree precedement dans un GtkTextView:
*/
charger_personne (GTK_TEXT_VIEW (p_txt));
}
gtk_widget_show_all (p_win);
gtk_main ();
return 0;
} |
Partager