Les Fichiers IIT 12/12/2016 1 Les Fichiers badr.siala@irit.fr Les Fichiers  Un

Les Fichiers IIT 12/12/2016 1 Les Fichiers badr.siala@irit.fr Les Fichiers  Un programme a en général besoin :  De lire des données (texte, nombres, images, sons, mesures, …) De lire des données (texte, nombres, images, sons, mesures, …)  De sauvegarder des résultats (texte, nombres, images, sons, signaux générés, …) Cela se fait en lisant et en écrivant dans des fichiers  Pour manipuler un fichier on utilise un Pour manipuler un  Pour manipuler un fichier on utilise un Pour manipuler un fichier, on utilise un pointeur sur une donnée sur une donnée spécifique dont le type est FILE (structure prédéfinie que nous n’avons pas besoin de connaître précisément) : FILE *fichier  La variable fichier contiendra l’adresse en mémoire du début du fichier 12/12/2016 2 Ouverture fermeture de fichiers  Ouverture d’un fichier à l’aide de la fonction fopen : fichier = fopen(“C:/Data/fichier1.txt”,”r”);  Cette fonction renvoie un pointeur sur le fichier ouvert.  fopen est définie dans le fichier stdio.h par : FILE *fopen (char *nom, char *mode)  nom est une chaîne de caractères (tableau de caractères) contenant le nom du fichier ou bien un flot de données standard (stdin )  mode désigne le type de traitement des données  “r” (read) : lecture (si le fichier existe)  “w” (write) : écriture (le fichier est écrasé s’il existe et s’il n’existe pas, il est crée)  “a” (append) : (append) : écriture à la fin d’un fichier existant 12/12/2016 3 Ouverture fermeture de fichiers  Où se trouve le fichier ouvert ?  Dans le répertoire de travail (plus de travail (plus exactement là où est le fichier exécutable .exe)  Comment travailler sur un fichier situé ailleurs ?  Le chemin absolu d’accès au fichier peut être donné in extenso  Le chemin absolu d’accès au fichier peut être donné in extenso (attention les \ de windows deviennent des / en C) fichier = fopen(“C:/Data/fichier1.txt”,”r”); fichier = fopen(“fichier1”,”r”);  A quoi sert l’extension .txt ?  A rien pour le Langage C.  Elle permet en revanche à l’OS de l’ordinateur de sélectionner le programme permettant d’ouvrir le fichier 12/12/2016 4 Ouverture fermeture de fichiers  Fermeture d’un fichier à l’aide de la fonction fclose : Important : Il faut toujours fermer un fichier après l’avoir utilisé .Afin de libérer la mémoire après l’avoir utilisé .Afin de libérer la mémoire fclose(fichier) ; fclose est définie dans le fichier stdio.h par : int fclose(FILE *fichier) ; 12/12/2016 5 Écriture lecture de fichiers textes  Écriture : fprintf(FILE *fichier,char *proto,…);  Exemple : double a; fprintf(fichier,«%lf»,a); printf("%lf" a); Presque même syntaxe que printf !  Lecture : fscanf(FILE *fichier,char *proto,…);  Exemple : double a; fscanf(fichier,"%lf",&a); Presque même syntaxe que scanf ! 12/12/2016 6 Exemple : écriture dans un fichier int main() { double a=1.5, b=2.5; FILE *fichier; // Ouverture du fichier en écriture grâce à "w" fichier = fopen( "essai.txt","w"); fichier = fopen( "essai.txt","w"); // Verifier que le fichier a bien été ouvert if (fichier != NULL) { // Ecriture fprintf(fichier,"%lf\n",a) ; fprintf(fichier,"%lf\n",b); // Fermeture du fichier fclose(fichier); } } 12/12/2016 7 Exemple : lecture à partir d’un fichier int main() { int i; double tab[2]; FILE *fichier; // Ouverture du fichier en lecture grâce à "r" // Ouverture du fichier en lecture grâce à "r" fichier = fopen("essai.txt","r"); if (fichier != NULL) { for(i=0;i<2;i++) fscanf(fichier,"%lf\n",tab+i); fclose(fichier); } for( i=0;i<2;i++) printf("%lf\n",tab[i]); } 12/12/2016 8 Format d’un fichier  Les fichiers précédents ont été écrits au format « texte »  On a utilisé jusqu’ici les fonctions : fprintf et fscanf  Tout se passe comme si l’affichage de la fenêtre console était envoyé dans le fichier.  Ou bien comme si le fichier se comportait comme les saisies  Ou bien comme si le fichier se comportait comme les saisies clavier pour envoyer des données au programme.  Les caractères sont stockés avec le code ASCii : American Standard Code for Information Interchange  Avec un langage évolué tel que le C :  Nous n’avons pas à connaître le code ASCii  Nous n’avons pas à connaître la représentation des nombres dans les mémoires 12/12/2016 9 Format d’un fichier  Lorsqu’on a des données numériques, il est souvent plus efficace de recopier directement le contenu de la mémoire donc de les écrire sous forme « binaire ».  Soit un nombre1.345643355454E-18  Au format double, il occupe 8 octets  Au format ASCII, il occupe 20 octets (1 octet par caractère)  Au format ASCII, il occupe 20 octets (1 octet par caractère)  On a 2 types de fichiers : fichiers « texte» et « binaire ».  Le format binaire va occuper beaucoup moins de place en mémoire  Comme il s’agit d’une recopie directe de la mémoire, on n’a pas à savoir comment est codé chaque nombre  Modes d’ouverture de fichiers binaires : “rb” ( ) read : Lecture , “wb” (write) : écriture (le fichier est écrasé s’il existe) et “ab” (append) : écriture à la fin d’un fichier existant 12/12/2016 10 Écriture lecture de fichiers binaires  Ecriture d’un bloc de données en binaire : int fwrite(void* source, int taille_type, int nb, FILE* flot)  Ecrit tout un bloc de données en un seul appel  Retourne un entier = nombre d’éléments effectivement écrits Pointeur sur les données Pointeur sur le fichier fwrite(tableau, sizeof(float), DIM, fichier);  Lecture d’un bloc de données en binaire int fread(void *dest, int taille_type, int nb, FILE *flot)  Lit un bloc de données en un seul appel  Retourne un entier = nombre d’éléments effectivement lus fread(tableau, sizeof(float), DIM, fichier); 12/12/2016 11 Pointeur sur le fichier Pointeur sur les données Exemple : fichiers binaires #include<stdio.h> #include<math.h> #define DIM 10000 int main() { int i; double sum,tab1[DIM],tab2[DIM]; if (fichier != NULL) { fwrite(tab1,sizeof(double),DIM,fichier); fclose(fichier); } // Lecture du fichier fichier = fopen("essai2.bin","rb"); double sum,tab1[DIM],tab2[DIM]; FILE *fichier; // Remplissage du tableau for(i=0;i<DIM;i++) tab1[i]=i*atan(1); // Ecriture du fichier au format binaire fichier = fopen("essai2.bin","wb"); fichier = fopen("essai2.bin","rb"); if (fichier != NULL) { fread(tab2,sizeof(double),DIM,fichier); fclose(fichier); } } 12/12/2016 12 uploads/Litterature/ slides05-rotated.pdf

  • 25
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager