Concernant les opérations d'ouvertures et de fermeture, vous pouvez consulter la documentation précédente.
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);
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 >
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;
}#