Chapitre 6
Chapitre 6
Chapitre 6
Arfaoui Ahlem
Introduction (1):
❖ En C, les communications d'un programme avec son environnement se font par l'intermédiaire
de fichiers.
❖ Pour le programmeur, tous les périphériques, même le clavier et l'écran, sont des fichiers.
❖ Jusqu'ici, nos programmes ont lu leurs données dans le fichier d'entrée standard, (c.-à-d.: le
clavier) et ils ont écrit leurs résultats dans le fichier de sortie standard (c.-à-d.: l'écran).
➔Défaut d’utilisation des variables:
✓n'existent que dans la mémoire vive
✓il n'est pas possible de les récupérer une fois le programme est arrêté.
➔Si on a à lire des données (texte, nombres,…) ou bien sauvegarder des résultats après l’arrêt du
programme ?
✓ vous devrez les enregistrer dans un fichier.
Introduction (2):
Introduction (3):
✓ Un fichier est un ensemble structuré de données stocké en général sur un support externe
(disquette, disque dur, disque optique, bande magnétique, ...).
✓ Un fichier structuré contient une suite d'enregistrements homogènes, qui regroupent le plus
souvent plusieurs composantes appartenant ensemble (champs).
✓ Dans des fichiers séquentiels, les enregistrements sont mémorisés consécutivement dans
l'ordre de leur entrée et peuvent seulement être lus dans cet ordre.
➔Si on a besoin d'un enregistrement précis dans un fichier séquentiel, il faut lire tous les
enregistrements qui le précèdent, en commençant par le premier.
Introduction (4):
❖ On a 2 types de fichiers:
✓Les fichiers textes: constitués d’une suite de caractères (codés en ASCII)
✓Les fichiers binaires: constitués d’une suite d’octets
❖ Lorsqu’on a des données numériques, il est souvent plus efficace de les écrire sous forme «
binaire ».
❖ Le format binaire occupe beaucoup moins de place en mémoire que le format texte.
Accès aux fichiers séquentiels(1):
❑ Le type FILE*:
❖ Pour pouvoir travailler avec un fichier, un programme a besoin d'un certain nombre
d'informations au sujet du fichier:
✓ Adresse de la mémoire,
✓ Position actuelle de la tête de lecture/écriture,
✓ Type d'accès au fichier: écriture, lecture, ...
✓ Etc.
❖ Ces informations sont rassemblées dans une structure du type spécial FILE. Lorsque nous
ouvrons un fichier avec la commande fopen, le système génère automatiquement un bloc du
type FILE et nous fournit son adresse.
Accès aux fichiers séquentiels(2):
❑ Le type FILE*:
✓ Déclarer un pointeur du type FILE* pour chaque fichier dont nous avons besoin.
✓ Employer le pointeur à la place du nom du fichier dans toutes les instructions de lecture ou
d'écriture.
❖ nomFichier : est une chaîne de caractères constante qui représente le chemin du fichier.
✓ Seul si le fichier existe dans le même dossier que l’exécutable du programme c.
✓ Avec un chemin relatif s’il existe dans un sous dossier du dossier du programme
Pour un fichier binaire, on utilise ("rb", "wb", "ab", "rb+", "wb+", "ab+").
Accès aux fichiers séquentiels(5):
Les étapes à suivre dans l’ordre pour gérer un fichier, que ce soit pour le lire ou pour y écrire:
1) Appeler la fonction d'ouverture de fichier fopen qui nous renvoie un pointeur sur le fichier.
2) Vérifier si l'ouverture a réussi en testant la valeur du pointeur qu'on a reçu.
a) Si le pointeur vaut NULL, c'est que l'ouverture du fichier n'a pas fonctionné, dans ce
cas on ne peut pas continuer (il faut afficher un message d'erreur).
b) Si le pointeur est différent de NULL, c’est que l'ouverture a fonctionné, alors on peut
lire ou écrire dans le fichier.
3) Une fois qu'on a terminé de travailler sur le fichier, il faut fermer le fichier avec la fonction
fclose.
Accès aux fichiers séquentiels(7):
❑ Exemple:
Ecriture dans des fichiers textes (1):
Syntaxe:
int fputc (int caractére, FILE * file);
➔Après avoir écrit un caractère dans le fichier texte, le pointeur de position interne est
incrémenté.
➔Si l'écriture réussit, la valeur ASCII du caractère qui a été écrit est renvoyée.
➔En cas d'erreur, il retourne EOF.
Ecriture dans des fichiers textes (2):
Exemple:
Ecriture dans des fichiers textes (3):
Syntaxe:
int fprintf (FILE * file, const char * format,…);
➔La fonction fprintf() est identique à printf(), mais au lieu d'écrire des données sur la console,
elle écrit des données formatées dans le fichier. Presque tous les arguments de la
fonction fprintf() sont identiques à ceux de la fonction printf(), à la différence qu’il possède
un argument supplémentaire qui est un pointeur de fichier sur le fichier dans lequel la
sortie formatée sera écrite.
➔En cas de succès, le nombre total de caractères écrits dans le fichier est renvoyé. En cas
d'erreur, il retourne EOF.
Ecriture dans des fichiers textes (5):
Exemple:
Lecture des fichiers textes (1):
Syntaxe:
int fgetc (FILE * file);
Syntaxe:
char * fgets (char * string, int maxLength, FILE * file);
➔Lit au maximum une ligne (elle s'arrête au premier \n qu'elle rencontre). Si vous voulez lire
plusieurs lignes, il faudra faire une boucle.
➔Prend en paramètre une chaine vide pour contenir ce qui est lu à partir du fichier, le nombre
maximal de caractères à lire et un pointeur sur le fichier à lire.
➔En cas de succès, elle retourne un pointeur à la string.
➔ En cas d'erreur ou de fin du fichier, elle renvoie NULL.
Lecture des fichiers textes (4):
Exemple 1:
Lecture des fichiers textes (5):
Exemple 2:
Lecture dans des fichiers textes(6):
Syntaxe:
int fscanf (FILE * file, const char * format,…);
➔La fonction fscanf() est utilisée pour lire une entrée formatée à partir du fichier. Cela
fonctionne comme la fonction scanf() mais au lieu de lire les données de l’entrée standard, il lit
les données du fichier. En fait, la plupart des arguments de la fonction fscanf() sont identiques
à ceux de la fonction scanf(), à la différence qu’il a simplement besoin d’un argument
supplémentaire, bien évidemment d’un pointeur de fichier.
➔En cas de succès, cette fonction renvoie le nombre de valeurs lues et en cas d'erreur ou de
fin du fichier, elle renvoie EOF.
Lecture dans des fichiers textes (7):
Exemple:
Ecriture dans des fichiers binaires(1):
❖ Dans cette partie, nous allons apprendre à lire et à écrire des données dans et à partir du fichier
en mode binaire.
❖ Rappelez-vous qu'en mode binaire, les données sont stockées dans le fichier de la même
manière que dans la mémoire, de sorte qu'aucune transformation de données n'a lieu en mode
binaire.
❖ La fonction fwrite: permet d’écrire tout un bloc de données en binaire
Syntaxe:
int fwrite(void * source, int taille_type, int nombre, FILE *fp);
La fonction prend quatre arguments:
✓ Adresse des données à écrire sur le fichier (source)
✓ Taille des données à écrire sur le fichier (taille_type)
✓ Nombre de ce type de données(nombre)
✓ Pointeur vers le fichier où vous voulez écrire (fp).
Ecriture dans des fichiers binaires(2):
Renommer un fichier:
Supprimer un fichier:
int remove (const char * fichierAsupprimer);
Exercice 1:
Ecrire un programme qui crée sur disquette un fichier INFBIS.TXT qui est la copie exacte
(enregistrement par enregistrement) du fichier INFORM.TXT.
Exercice 2: