Entrées/Sorties sur un fichier binaire

Concernant les opérations d'ouvertures et de fermeture, vous pouvez consulter la documentation précédente.

Ouverture d'un fichier

Attention, on doit indiquer que le fichier est binaire avec un "b" dans le mode d'ouverture

  // ouverture du fichier
  fic = fopen(nom_fic, "rb"); // ouvrir binaire en lecture
  if(fic == NULL){
      printf("Impossible d'ouvrir le fichier %s\n", nom_fic);
      exit(1);
  }
  printf(".............. Ouverture du fichier binaire %s\n", nom_fic);

Lecture des données d'un fichier binaire

fread

La fonction size_t fread(void* ptr,size_t size,size_t n, FILE *f) lit n éléments de taille size et les stocke dans cptr. Elle retourne le nombre d'éléments lus. Elle peut en retourner moins que demandé. Elle retourne 0 en cas d'erreur ou de fin de fichier.

Ici, une fonction qui lit un tableau d'entier dans un fichier bianire

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10

int read_n_int(int* t,unsigned int n,FILE* f)
{
  int i;
  i=fread(t,n,sizeof(int),f);
  return (i!=0);
}


int main(int argc, char *argv[]) {
  FILE *fic; 
  int tab[N];
  int i;
 char *nom_fic="binaire";

  // ouverture du fichier
  fic = fopen(nom_fic, "rb"); // ouvrir en lecture binaire
  if(fic == NULL){
      printf("Impossible d'ouvrir le fichier %s\n", nom_fic);
      exit(1);
  }
  printf(".............. Ouverture du fichier %s\n", nom_fic);
  
  if (read_n_int(tab,N,fic)) {
     for(i=0;i<N;i++) {
        printf("l'élément %d vaut %d\n",i,tab[i]);
     }
  }

  
  // fermeture du fichier
  if(fclose(fic) == EOF) {
      printf("Probleme de fermeture du fichier %s", nom_fic);
      exit(1);
  }
  printf(".............. Fermeture du fichier %s\n", nom_fic);

  return 0;
}

Ce qui nous donne

>./ficFinaire2
.............. Ouverture du fichier binaire
l'élément 0 vaut 12
l'élément 1 vaut 120
l'élément 2 vaut 4
l'élément 3 vaut 15
l'élément 4 vaut 34
l'élément 5 vaut 12
l'élément 6 vaut 4
l'élément 7 vaut 55
l'élément 8 vaut 610
l'élément 9 vaut 68
.............. Fermeture du fichier binaire
> 

Lecture des données d'un fichier binaire

fwrite

La fonction size_t fwrite(const void* ptr,size_t size,size_t n,FILE* f) écrit n élément de taille size dans le fichier f, et ce à partir de la zone pointée par ptr..

Le programme créé le fichier binaire qui est lu ci dessus. Ce fichier contiendra le contenu du tableau tab..

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10

int read_n_int(int* t,unsigned int n,FILE* f)
{
    int i;
   while (n && (i=fread(t,n,sizeof(int),f))) {
     printf("%d",i);
     t=t+i;
     n=n-i;
  }
  return (n==0);
}


int main(int argc, char *argv[]) {
  FILE *fic; 
  int tab[N]={12,120,4,15,34,12,4,55,610,68};
  int i;

  

  // ouverture du fichier
  fic = fopen("binaire", "wb"); // ouvrir en lecture binaire
  if(fic == NULL){
      printf("Impossible d'ouvrir le fichier binaire\n", );
      exit(1);
  }
  printf(".............. Ouverture du fichier "binaire"\n");
  
  fwrite(tab,sizeof(int),N,fic);


  
  // fermeture du fichier
  if(fclose(fic) == EOF) {
      printf("Probleme de fermeture du fichier binaire");
      exit(1);
  }
  printf(".............. Fermeture du fichier binaire");

  return 0;
}#
css html