« Programmation C++/Les fichiers » : différence entre les versions

m
aucun résumé des modifications
mAucun résumé des modifications
Cette fonction lit nb élements de size octets (soit nb*size octets) à partir du fichier f (qui doit être ouvert en lecture) vers le pointeur buffer (dans la RAM). Il s'agit donc d'un transferts d'octets d'un fichier vers la RAM.
 
* '''Exemple : écriture du fichier'''<br/>
 
<pre>
<source lang="cpp" line>
#include <iostream>
#include<cstdio>
using namespace std;
 
int main (void)
{
FILE * f;
int a = 78, i, t1 [6];
double b = 9.87;
char c = 'W', t2 [10];
 
int t1[6];
for(i = 0; i < 6; i++)
char t2[10];
t1 [i] = 10000 + i;
int i;
strcpy (t2, "AZERTYUIO");
for(i=0;i<6;i++)t1[i]=10000+i;
cout << t2 << endl;
strcpy(t2,"AZERTYUIO");
f = fopen ("toto.xyz", "wb");
cout<<t2<<endl;
if (f == NULL)
f=fopen("toto.xyz","wb");
if(f==NULL) cout << "Impossible d'ouvrir le fichier en écriture !" << endl;
else
{
fwrite (&a,sizeof(int),1,f);
fwrite (&b,sizeof(double),1,f);
fwrite (&c,sizeof(char),1,f);
fwrite (t1,sizeof(int),6,f);
fwrite (t2,sizeof(char),10,f);
fclose (f);
}
 
return 0;
}
</presource>
 
 
Dans ce programme, on ouvre le fichier binaire nommé toto.xyz en écriture. Si on a réussi à ouvrir le fichier, on y écrit un entier, un double, un char, puis un tableau de 6 entiers et finalement un tableau de 10 char. <br/>
On remarquera que pour écrire un entier il faut écrire &a pour obtenir un pointeur vers cet entier. Pour copier le tableau t1 on écrire juste t1 car t1 est déjà un pointeur vers le premier élément du tableau.
 
* '''Exemple : lecture du fichier'''<br/>
 
<pre>
<source lang="cpp" line>
#include <iostream>
#include<cstdio>
using namespace std;
 
int main (void)
{
FILE * f;
int a, t1 [6], i;
double b;
char c, t2[10];
int t1[6];
char t2[10];
int i;
 
f = fopen("toto.xyz", "rb");
if (f == NULL)
if(f==NULL)cout<<"Impossible d'ouvrir le fichier en lecture !"<<endl;
cout << "Impossible d'ouvrir le fichier en lecture !" << endl;
else
else
{
fread (&a,sizeof(int),1,f);
fread (&b,sizeof(double),1,f);
fread (&c,sizeof(char),1,f);
fread (t1,sizeof(int),6,f);
fread (t2,sizeof(char),10,f);
fclose (f);
}
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
for(i=0;i<6;i++)cout<<t1[i]<<endl;
cout<<t2<<endl;
 
cout << "a=" << a << endl
return 0;
<< "b=" << b << endl
<< "c=" << c << endl;
for (i = 0; i < 6; i++)
cout << t1 [i] << endl;
cout << t2 << endl;
 
return 0;
}
</presource>
 
 
Dans ce programme, on ouvre le fichier binaire nommé toto.xyz en écriture. Si on a réussi à ouvrir le fichier, on lit un entier, un double un char, puis un tableau de 6 entiers et finalement un tableau de 10 char.
 
La fonction scanf permet de lire les données à partir d'un fichier texte en utilisant le format de données indiqué ( qui est identique à printf).
 
* '''Exemple : écriture du fichier'''<br/>
 
<pre>
<source lang="cpp" line>
#include <iostream>
#include<cstdio>
using namespace std;
 
int main (void)
{
FILE * f;
int a = 78, t1 [6], i;
double b = 9.87;
char c = 'W', t2 [10];
int t1[6];
char t2[10];
int i;
for(i=0;i<6;i++)t1[i]=10000+i;
strcpy(t2,"AZERTYUIO");
 
for (i = 0; i < 6; i++)
f=fopen("toto.txt","wt");
t1 [i] = 10000+i;
if(f==NULL)cout<<"Impossible d'ouvrir le fichier en écriture !"<<endl;
strcpy (t2, "AZERTYUIO");
else
f = fopen ("toto.txt", "wt");
if (f == NULL)
cout << "Impossible d'ouvrir le fichier en écriture !" << endl;
else
{
fprintf (f, "%d %lf %c ", a, b, c);
for (i=0;i<6;i++)fprintf(f,"%d ",t1[i]);
fprintf (f, "%sd ",t2 t1[i]);
fclose fprintf (f, "%s ", t2);
fclose (f);
}
 
return 0;
}
}</pre>
</source>
 
 
Dans ce programme, on ouvre le fichier texte nommé toto.txt en écriture. Si on a réussi à ouvrir le fichier, on y écrit un entier, un double, un char, puis un tableau de 6 entiers et finalement une chaîne de caractères sans espace contenu dans un tableau de char.
 
* '''Exemple : lecture du fichier'''<br/>
 
<pre>
<source lang="cpp" line>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int main (void)
{
FILE * f;
double b;
int a;
int a, t1 [6], i;
double b;
char c, t2 [10];
int t1[6];
char t2[10];
int i;
 
f = fopen ("toto.txt", "rt");
 
if (f == NULL)
f=fopen("toto.txt","rt");
if(f==NULL) cout << "Impossible d'ouvrir le fichier en lecture !" << endl;
else
{
fscanf (f, "%d %lf %c ", &a, &b, &c);
for (i = 0; i < 6; i++)fscanf(f,"%d ",&t1[i]);
fscanf (f, "%sd ",t2 &t1 [i]);
fclose fscanf (f, "%s ", t2);
fclose (f);
}
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
for (i = 0; i < 6; i++)cout<<t1[i]<<endl;
cout <<t2 t1 [i] << endl;
cout << t2 << endl;
system("PAUSE");
 
return 0;
return 0;
}
</presource>
 
 
Dans ce programme, on ouvre le fichier binaire nommé toto.txt en lecture. Si on a réussi à ouvrir le fichier, on lit un entier, un double, un char, puis un tableau de 6 entiers et finalement une chaîne de caractères.
 
 
*'''Exemple : ecriture d'un fichier texte'''
 
<pre>
<source lang="cpp" line>
#include <iostream>
#include <fstream>
using namespace std;
 
int main(void)
{
int a = 78, t1 [6], i;
double b = 9.87;
char c = 'W';
string s;
int t1[6];
 
string s;
for (i = 0; i < 6; i++)
int i;
for(i=0;i<6;i++) t1 [i] = 10000+i;
s = "AZERTYUIO";
ofstream f ("toto.txt");
 
if (!f.is_open())cout<<"Impossible d'ouvrir le fichier en écriture !"<<endl;
cout << "Impossible d'ouvrir le fichier en écriture !" << endl;
else
else
{
f << a <<" "<<" " << b << " " << c << endl;
for (i = 0; i < 6; i++)f<<t1[i]<<" ";
f <<s t1 [i] << " ";
f << s;
}
f.close();
return 0;
}
</presource>
 
 
*'''Exemple : lecture d'un fichier texte'''
 
<pre>
<source lang="cpp" line>
#include <iostream>
#include <fstream>
using namespace std;
 
int main (void)
{
int a, t1 [6], i;
double b;
char c;
string s;
int t1[6];
ifstream f ("toto.txt");
string s;
int i;
ifstream f("toto.txt");
 
if (!f.is_open())cout<<"Impossible d'ouvrir le fichier en lecture !"<<endl;
cout << "Impossible d'ouvrir le fichier en lecture !" << endl;
else
else
{
f >> a >> b >> c;
for (i = 0; i < 6; i++)f>>t1[i];
f >>s t1 [i];
f >> s;
}
f.close();
cout << "a=" << a << endl;
cout << "b=" << b <<endl;
cout << "c=" << c <<endl;
for (i = 0; i < 6; i++)cout<<t1[i]<<endl;
cout <<s t1 [i] << endl;
cout << s << endl;
return 0;
 
return 0;
}
</presource>
 
 
=== Les fichiers binaires ===
 
*'''Ecriture d'un fichier binaire'''
 
<pre>
<source lang="cpp" line>
#include <iostream>
#include <fstream>
using namespace std;
 
int main (void)
{
int a = 78, t1 [6], i;
double b = 9.87;
char c = 'W';
int t1[6];
 
for (i = 0; i < 6; i++)
int i;
for(i=0;i<6;i++) t1 [i] = 10000+i;
 
ofstream f ("toto.xyz", ios::out | ios::binary);
 
if(!f.is_open())cout<<"Impossible d'ouvrir le fichier en écriture !"<<endl;
cout << "Impossible d'ouvrir le fichier en écriture !" << endl;
else
else
{
f.write ((char *)&a, sizeof(int));
f.write ((char *)&b, sizeof(double));
f.write ((char *)&c, sizeof(char));
for (i = 0; i < 6; i++)f.write((char *)&t1[i],sizeof(int));
f.write ((char *)&t1[i], sizeof(int));
}
f.close();
 
return 0;
return 0;
}
</presource>
 
 
*'''lecture d'un fichier binaire'''
 
<pre>
<source lang="cpp" line>
#include <iostream>
#include<fstream>
using namespace std;
 
int main (void)
{
int a, t1 [6], i;
double b;
char c;
string s;
int t1[6];
ifstream f ("toto.xyz", ios::in | ios::binary);
string s;
int i;
 
if (!f.is_open())
ifstream f("toto.xyz",ios::in | ios::binary);
cout << "Impossible d'ouvrir le fichier en lecture !" << endl;
 
else
if(!f.is_open())cout<<"Impossible d'ouvrir le fichier en lecture !"<<endl;
else
{
f.read ((char *)&a, sizeof(int));
f.read ((char *)&b, sizeof(double));
f.read ((char *)&c, sizeof(char));
for (i = 0; i < 6; i++)f.read((char *)&t1[i],sizeof(int));
f.read ((char *)&t1[i], sizeof(int));
}
f.close();
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
for (i = 0; i < 6; i++)cout<<t1[i]<<endl;
cout << t1 [i] << endl;
 
return 0;
}
</presource>
 
 
[[Catégorie:Programmation C++ (débutant) (livre)]]
6

modifications