|
|
Structures
Annuaire Exercice 3 Enregistrement persistant |
|
Rappels
: stockage persistant
|
||||||||||||
|
Mais ce type de mémoire perd toute information lors de la coupure de l'alimentation électrique (mémoire dite "volatile") ou lorsque l'on quitte le programme. Le segment de mémoire peut être uilisé par par d'autres programmes. Si on veut conserver ces données, il faut les enregistrer dans une mémoire persistante : disque dur, disquette, CD-ROM, enregistreurs-lecteurs à bandes etc. Il existe de très nombreuses procédures permettant des échanges de données entre la RAM et les supports de stockange persistant. Nous allons utiliser les suivantes :
Les prototypes de ces fonctions se trouvent dans <stdio.h> |
|
Type
"FILE" (
manipulateur de fichier : File Handler )
|
||||
|
Un "manipulateur de fichier" (file handler) est une valeur retournée par le système d'exploitation quand nous lui proposons d'ouvrir un fichier à l'aide de la procédure fopen(...). Pour
nous, humains, la meilleure manière de désigner un fichier
c'est son nom de fichier. Il
est possible que dans l'opération d'ouverture du fichier (fonction
fopen(...)) le système d'exploitation de l'ordinateur manque de
ressources pour gérer le fichier que nous lui demandons d'ouvrir
: plus assez de mémoire, dique plein, trop de fichiers ouverts
etc. Un manipulateur de fichier est du type "FILE" (ce type est défini dans les bibliothèques de programmes qui accompagnent le logiciel de développement ;son prototype se trouve dans <stdio.h>. Ainsi, dans notre programme, nous devrons déclarer ainsi une variable manipulateur de fichier :
Voir
ci-dessous dans la description de la procédure fopen() comment
on obtient la valeur |
|
Procédure
d'ouverture de fichier "fopen(...)"
|
|||||||||||||||
|
FILE *fopen( const char *filename, const char *mode ); Paramètres :
Valeur retournée par fopen(... ) :
Exemple :
|
|
Procédure
de lecture de fichier "fread(...)"
|
|
|
size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); Note : size_t est un type particulier du compilateur utilisé pratiquement équivalent à un "unsigned" Paramètres :
Valeur retournée par fread(... ) :
|
|
Procédure
d'enregistrement de fichier "fwrite(...)"
|
|
|
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ); Note : size_t est un type particulier du compilateur utilisé pratiquement équivalent à un "unsigned" Paramètres :
Valeur retournée par fwrite(... ) :
|
|
Procédure
de clôture d'un fichier "fclose(...)"
|
|
int fclose( FILE *stream ); Lors
de l'appel à a procédure fopen(...) le système d'exploitation
a alloué des ressources en vue de pouvoir réaliser les opérations
ultérieurement demandées. Paramètre :
Valeur retournée par fclose(... ) :
|
|
Modifications
du fichier "Fichier.cpp" du projet Annuaire
Dans ce qui suit, nous avons écrit des procéduresqui utilisent les fonctions brutes fopen, fread, fwrite, fclose en les aménageant pour notre fichier particulier : Fiche Fichier[NB_MAX_FICHES] C'est un travail de méthodologie, mais il permet aussi d'en faire comprendre l'usage plus progressivement |
|
|
|
Modifications
du fichier "Annuaire.cpp" du projet Annuaire
|
|
|
|
Les
résultats
|
|
1 - Je lance le programme et je saisis nos anciens copains jadis perdus :
2 - Je quitte ce programme, j'éteins mon ordinateur, je pars en vacances.
3 Je reviens de vacances,
Toto et Titine sont bien là : on-a-ga-gné ! |
|
Si
je regarde maintenant, à l'aide de l'explorateur de Windows
|
Ne ratez pas la suite : elle est mémorable et dynamique !
|
|