Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Table des matières
Lecture / écriture de fichiers
La commande fopen
Il faut utiliser la commande fopen qui se trouve dans <stdio.h>
#include <stdio.h>
int main() {
FILE* fichier = fopen("nom_du_fichier", "r");
}
FILEest un type défini dans<stdio.h>fichierpointe sur le fichier.
Les modes
"r": lecture seule"w": écriture seule (pas lecture !). Si le fichier n'existe pas, il est créé."a": ajoute des données en fin de fichier. Si le fichier n'existe pas, il est créé."a+": avec lecture en plus."r+": lecture / écriture. Le fichier doit exister au préalable."w+": lecture / écriture. Si le fichier n'existe pas, il est créé.
Tester le succès
En cas de problème, fichier reçoit la valeur NULL.
int main() {
FILE* fichier = fopen("nom_du_fichier", "r");
if (fichier == NULL) {
// échec
return 1;
}
// succès
// suite du code...
return 0;
}
Penser à fermer le fichier
On utilise fclose
int main() {
FILE* fichier = fopen("nom_du_fichier", "r");
if (fichier == NULL) {
// échec
return 1;
}
// succès
// suite du code...
// quand on fini de manipuler le fichier
fclose(fichier);
// suite de ce qu'on a à faire
// ...
return 0;
}
Écrire dans le fichier
Quand on écrit, il y a des flux :
- Le flux standard pour écrire (sortie du point de vue de la machine) est l'écran. C'est
stdout(standard output) qui reçoit l'id 1. - Notre variable
fichierest aussi un identifiant.
Ainsi, quand on utilise printf on écrit forcément à l'écran, donc dans stdout. Il existe une autre commande, fprintf, qui permet de spécifier le flux cible.
fprintf(1, …)envoie versstdoutc'est donc la même chose queprintf.fprintf(fichier, …)envoie vers le fichier.
Autres commandes
fputc('A', fichier)permet d'ajouter le caractère A dans le fichier.
Remarquez qu'en C on utilise les guillemets simples'...'pour un simple caractère.fputs("lalala", fichier)permet d'ajouter une chaîne.
Lire dans un fichier
La encore nous avons des flux. Le flux standard pour lire (entrée du point de vue de la machine) est le clavier. C'est stdin (standard input) qui reçoit l'id 0
Il faut imaginer que l'on a un curseur de lecture. Le curseur est initialement placé sur le premier caractère et il avance à chaque lecture.
int c = fgetc(fichier);permet de lire le prochain caractère.
Si on a atteint la fin du fichier, on reçoitEOF(End Of File)).int c = fgetc(fichier); while (c != EOF) { // traitement quelconque... c = fgetc(fichier); }fgetspermet de lire une chaîne. On lit au maximumncaractères. Si'\n'est rencontré, ne va pas plus loin.#define TAILLE_MAX 1000 int main() { FILE* fichier = NULL; char chaine[TAILLE_MAX] = ""; fichier = fopen("test.txt", "r"); if (fichier == NULL) { return 1; } fgets(chaine, TAILLE_MAX, fichier); // lit au maximum TAILLE_MAX caractères du fichier // traitement sur chaine... fclose(fichier); return 0; }
Lecture formatée avec fscanf
De même que printf a sa version fprintf permettant de sélectionner le flux, scanf a sa version fscanf.
Supposons que le texte contienne 3 nombres 78 89 52. On peut récupérer ces nombres avec fscanf :
int main()
{
FILE* fichier = NULL;
int nombres[3];
fichier = fopen("test.txt", "r");
if (fichier == NULL) {
return 1;
}
fscanf(fichier, "%d %d %d", &nombre[0], &nombre[1], &nombre[2]);
// plus besoin du fichier
fclose(fichier);
// traitement voulu... par exemple on fait la somme :
int s = nombre[0] + nombre[1] + nombre[2];
printf("%d\n", s);
return 0;
}
La précision de "%d %d %d" dans le format de fscanf permet de récupérer trois nombres en une fois. On aurait pu faire 3 fois un fscanf avec un format plus simple "%d".
