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
| #include <stdio.h>
#include <stdlib.h> /* -ed- ajoute pour exit() */
/* -ed- cette macro calcule le nombre d'elements d'un tableau */
#define NbElt(t) (sizeof t/sizeof t[0])
/* -ed- une structure de donnees quelconques pour illustrer l'exemple */
typedef struct
{
int n;
float t[10];
char c;
}
Donnee;
int main (int argc, char *argv[])
{
/* -ed- des donnees initialises pour l'exemple, je suppose...
Atention a n'existe pas. C'est 'a'
*/
Donnee s1 = { 1, {1., 2., 3.}, 'a' };
Donnee s2[] = { {4, {10., 32., 3.}, 'z'}, {5, {2., 11., 2., 4.}, 'h'} };
FILE *f, *f_sauve;
Donnee s;
/* -ed- ouverture du fichier "donnees" en ecriture texte */
if ((f = fopen ("donnee", "w")) == NULL)
perror ("fopen"), exit (1);
/* -ed- enregisrement des donnes au format 'raw' (brut).
Attention, non portable, surtout en mode 'texte'*/
fwrite (&s1, sizeof (Donnee), 1, f);
fwrite (s2, sizeof (Donnee), NbElt (s2), f);
/* -ed- enregistrement termine, on ferme le fichier. */
fclose (f);
/* -ed- maintenant, on ouvre un fichier en mode lecture texte
et l'autre en mode ecriture texte.
c'est un peu horrible comme codage et surtout tres illisible...
*/
if ((f = fopen ("donnee", "r")) == NULL ||
(f_sauve = fopen ("sauvegarde", "w")) == NULL)
perror ("fopen"), exit (2);
/* -ed- lecture des donnees */
fread (&s, sizeof (Donnee), 1, f);
/* -ed- buf : feof() ne fait pas le test de fin de fichier.
Il faut tester la fonction de lecture... */
while (!feof (f))
{
/* -ed- ecriture */
fwrite (&s, sizeof (Donnee), 1, f_sauve);
/* -ed- lecture */
fread (&s, sizeof (Donnee), 1, f);
}
/* -ed- On a pas ecrit le dernier bloc. C'est voulu ? */
/* -ed- copie termine, on ferme les fichiers. */
fclose (f);
fclose (f_sauve);
} |
Partager