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

Dans ce tutoriel, nous allons apprendre comment lire et écrire dans un fichier texte en C++. Dans les deux cas, il faut toujours vérifier si le fichier existe après la déclaration d'un flux de données de lecture/écriture:

ifstream monFlux("C:/test.txt");
if(monFlux){
   ...
}
else{
    //message qui indique que le fichier n'existe pas
}

Ecriture dans un fichier en C++

L'écriture se fait en créant un flux ofstream qui prend en paramètre le nom de fichier. Ce flux va jouer l’intermédiaire entre le compilateur et le fichier. L'instruction nomFlux << " écrire quelque chose "<<endl; écrit la phrase "écrire quelque chose" dans le fichier test.txt. endl fait un retour à la ligne.

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

void ecriture(int T[])
{
     string const nomFichier("C:/test.txt");
     ofstream monFlux(nomFichier.c_str());
     if(monFlux)
     {
                string chaine;
                for(int i = 0 ; i < 10 ;i++)
                    chaine += convertInt(T[i])+" ";
                monFlux << chaine << endl ;
     }
     else
        cout << "Impossible d'ouvrir le fichier." << endl;   
}

//Convertir un entier en string
string convertInt(int nombre)
{
   stringstream ss;ss << nombre;return ss.str();
}

//Générer un nombre alétoire
int rand(int nb)
{
    return rand()%nb;
}

int main()
{
    int T1[10]={1,2,3,4,5,6,7,8,9,10};
    ecriture(T1);
    lecture();
    srand(time(NULL));
    for(int i=0; i<5; i++)
            printf("%d  \n",rand(50));
    system("pause");
}

Lecture d'un fichier en C++

En C++, on peut lire avec trois manières:
  1. Ligne par ligne: le curseur de lecture va lire la ligne entière et passe vers la suivante avec la méthode getline ( ifstream flux, string ligne).
  2. Mot par mot: avec l'instruction monFlux >> mot; mot est un string. Les mots sont séparés par des espaces.
  3. caractère par caractère: avec la méthode get(char c).
Exemple:
void lecture()
{
     ifstream monFlux("C:/test.txt");
     if(monFlux)
     {
                string ligne;
                printf("ligne par ligne\n");
                while(getline(monFlux,ligne))
                      cout<<ligne<<endl;
                printf("mot par mot\n");
                monFlux.clear();
                //initialiser le curseur de zéro
                monFlux.seekg(0, ios::beg);
                string mot;
                while(monFlux >> mot)
                      cout<<mot<<endl;
                printf("caractere par caractere\n");
                monFlux.clear();
                monFlux.seekg(0, ios::beg);
                char c;
                while(monFlux.get(c))
                {
                     cout<<c<<endl;
                     int position=monFlux.tellg();         
                }
     }
     else
         cout<<"impossible d'ouvrir le fichier" <<endl;
}