« Programmation C++/Les fichiers » : différence entre les versions
Contenu supprimé Contenu ajouté
mAucun résumé des modifications |
|||
Ligne 54 :
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'''
<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];
for(i = 0; i < 6; i++)
t1 [i] = 10000 + i;
strcpy (t2, "AZERTYUIO");
cout << t2 << endl;
f = fopen ("toto.xyz", "wb");
if (f == NULL)
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;
}
</
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'''
<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];
f = fopen("toto.xyz", "rb");
if (f == NULL)
cout << "Impossible d'ouvrir le fichier en lecture !" << endl; 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
<< "b=" << b << endl
<< "c=" << c << endl;
for (i = 0; i < 6; i++)
cout << t1 [i] << endl;
cout << t2 << endl;
return 0;
}
</
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.
Ligne 144 ⟶ 149 :
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'''
<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];
for (i = 0; i < 6; i++)
t1 [i] = 10000+i;
strcpy (t2, "AZERTYUIO");
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, "%s ", t2);
fclose (f);
}
return 0;
}
</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'''
<source lang="cpp" line>
#include <cstdlib>
#include <iostream>
Ligne 183 ⟶ 193 :
using namespace std;
int main (void)
{
FILE * f;
double b;
int a, t1 [6], i;
char c, t2 [10];
f = fopen ("toto.txt", "rt");
if (f == NULL)
else
{
fscanf (f, "%d %lf %c ", &a, &b, &c);
for (i = 0; i < 6; i++)
fscanf (f, "%d ", &t1 [i]); fscanf (f, "%s ", t2);
fclose (f);
}
cout << "a=" << a << endl
for (i = 0; i < 6; i++)
cout << t1 [i] << endl; cout << t2 << endl;
return 0;
}
</
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.
Ligne 229 ⟶ 240 :
*'''Exemple : ecriture d'un fichier texte'''
<source lang="cpp" line>
#include <iostream>
#include <fstream>
Ligne 236 ⟶ 248 :
using namespace std;
int main(void)
{
int a = 78, t1 [6], i;
double b = 9.87;
char c = 'W';
string s;
for (i = 0; i < 6; i++)
s = "AZERTYUIO";
ofstream f ("toto.txt");
if (!f.is_open())
cout << "Impossible d'ouvrir le fichier en écriture !" << endl; else
{
f << a <<
for (i = 0; i < 6; i++)
f << t1 [i] << " "; f << s;
}
f.close();
return 0;
}
</
*'''Exemple : lecture d'un fichier texte'''
<source lang="cpp" line>
#include <iostream>
#include <fstream>
Ligne 267 ⟶ 284 :
using namespace std;
int main (void)
{
int a, t1 [6], i;
double b;
char c;
string s;
ifstream f ("toto.txt");
if (!f.is_open())
cout << "Impossible d'ouvrir le fichier en lecture !" << endl; else
{
f >> a >> b >> c;
for (i = 0; i < 6; i++)
f >> t1 [i]; f >> s;
}
f.close();
cout << "a=" << a << endl
for (i = 0; i < 6; i++)
cout << t1 [i] << endl; cout << s << endl;
return 0;
}
</
=== Les fichiers binaires ===
Ligne 307 ⟶ 327 :
*'''Ecriture d'un fichier binaire'''
<source lang="cpp" line>
#include <iostream>
#include <fstream>
Ligne 313 ⟶ 334 :
using namespace std;
int main (void)
{
int a = 78, t1 [6], i;
double b = 9.87;
char c = 'W';
for (i = 0; i < 6; i++)
ofstream f ("toto.xyz", ios::out | ios::binary);
if(!f.is_open())
cout << "Impossible d'ouvrir le fichier en écriture !" << endl; 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.close();
return 0;
}
</
*'''lecture d'un fichier binaire'''
<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;
ifstream f ("toto.xyz", ios::in | ios::binary);
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.close();
cout << "a=" << a << endl
for (i = 0; i < 6; i++)
cout << t1 [i] << endl; return 0;
}
</
[[Catégorie:Programmation C++ (débutant) (livre)]]
|