turrier.fr

Source : ct|23.04.08

< Tutoriels Informatique, Multimédia, Chinois

Lire et écrire dans un fichier binaire en C++

Un fichier binaire est un fichier contenant une succession d'octets, chacun d'eux pouvant prendre une valeur décimale allant de 0 à 255 (00 à FF en hexadécimal). En général on attribue une extension .bin ou .dat à un fichier binaire qui ne présente pas un format reconnu par un logiciel particulier. Dans le cas contraire, on lui attribue l'extension reconnue par ce logiciel.

Un fichier binaire se distingue d'un fichier texte (extension .txt) en ce sens qu'il peut contenir des octets dont la valeur ne correspond à aucun des caractères reconnus par un éditeur de texte ordinaire. Pour cette raison un fichier binaire doit être lu soit avec un logiciel spécifique qui comprend son format, soit avec un éditeur hexadécimal. Dans le dernier cas, l'éditeur hexadécimal se contente d'afficher la valeur numérique (00 à FF) de chacun des octets contenus dans le fichier.

Le présent tutorial montre, à l'aide d'un exemple, une solution (il en existe de nombreuses autres...) permettant de créer des fichiers binaires, puis de lire et écrire des octets à l'intérieur de ceux-ci à l'aide du langage C++.

Nous utiliserons l'environnement de développement freeware Code::Blocks, mais tout autre environnement de développement peut bien entendu être utilisé (DevCpp, Visual Studio Express...)

Introduction

Pour écrire des octets dans un fichier binaire "fic1.dat", nous commencerons par écrire ces octets dans un tableau en mémoire int t[100], puis nous transférerons le contenu de ce tableau dans le fichier binaire.

Pour lire les octets contenus dans un fichier binaire "fic1.dat", nous écrirons ces données dans un tableau en mémoire int t[100].

image1

L'exemple indiqué ci-après :
1- Crée un fichier "fic1.dat", écrit 10 octets (0,1,2,3,4,5,6,7,8 et9) dans un tableau t[100], transfère le contenu de ce tableau dans le fichier "fic1.dat"puis ferme le fichier "fic1.dat"
2- Ouvre le fichier "fic1.dat", lit les 10 premiers octets contenus dans ce fichier, les transfère dans un tableau T[100] puis ferme le fichier "fic1.dat"
3- Crée un fichier "fic2.dat", écrit dans ce fichier les 10 octets contenus dans le tableau t[] augmentés de la valeur 10, puis ferme le fichier "fic2.dat".

A la fin du programme, en ouvrant "fic1.dat" et "fic2.dat" à l'aide d'un diteur hexadécimal on trouve :
- Dans le fichier "fic1.dat", les 10 octets 00 01 02 03 04 05 06 07 08 09
- Dans le fichier "fic2.dat", les 10 octets précédents augmentés de 10 soit 10 11 12 13 14 15 16 17 18 19, soit en hexadécimal 0A 0B 0C 0D 0E 0F 10 11 12 13.

Le code source

#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int main()
{
FILE *fichier;
int i;
int t[100];
//-------------------------------------------------------
//creation du fichier fic1.dat et ecriture de 10 octets
//------------------------------------------------------
cout<<"Ecriture de 10 octets dans fic1.dat\n";
for (i=0;i<10;i++){t[i]= i;}
fichier = fopen("fic1.dat","w+b");
for (i=0; i <10; i ++)
{
fprintf (fichier,"%c", t[i]);
}
fclose(fichier);
system("pause");
//----------------------------------------
//Lecture d'octets dans le fichier fic1.dat
//--------------------------------------
cout<<"Lecture de 10 octets dans fic1.dat\n";
fichier=fopen("fic1.dat","r");
for (i=0; i <10; i ++)
{
fseek(fichier,i,SEEK_SET);
t[i]=fgetc(fichier);
}
fclose(fichier);
system("pause");
//-----------------------------------------------
//Creation du fichier fic2.dat et écriture de 10 octets
//------------------------------------------------
for (i=0;i<10;i++){t[i]= 10+t[i];}
cout<<"Ecriture de 10 octets dans fic2.dat\n";
fichier = fopen("fic2.dat","w+b");
for (i=0; i <10; i ++)
{
fprintf (fichier,"%c", t[i]);
}
fclose(fichier);
cout<<"Fin du traitement\n";
system("pause");
return 1;
}

Exécution du programme

Après compilation du code source ci-dessus, le résultat obtenu pendant puis après l'exécution du programme est illustré par les images suivantes.

image2

image3

image4

image5


Valid XHTML 1.0 Transitional

© http://turrier.fr (2007)