La gestion des fichiers

Mécanisme indispensable dans un programme informatique, l'ouverture et la modification de fichiers informatiques.

La bibliothèque liée est QFile qui hérite de QFileDevice

Initialisation et ouverture

Il faut dans un premier temps déclarer le fichier en initialiser une instance de QFil

Puis ouvrir le fichier :


chaine="monfichier.txt";    
QFile myfile(chaine);
     if(myfile.open(QIODevice::ReadOnly))
      {
  //traitement si l'ouverture du fichier se passe bien
 }
     else
         QMessageBox::critical(this,"Erreur","Le fichier "+chaine+"/n ne peut être ouvert.");


Remarque 1 : La fonction OPEN renvoie un booléen égal à VRAI si le fichier peut s'ouvrir.

Remarque 2 : les paramètres possibles de Open sont :

    • IO_readOnly : déclarer un fichier
    • IO_WriteOnly : déclarer un fichierEcriture dans le fichier en écrasant son contenu antérieur (si le fichier n'existait pas, il est créé)
    • IO_WriteOnly|IO_Append : Ecriture dans le fichier, à la suite de son contenu antérieur


Traitement des données

Mettre le contenu d'un fichier dans un tableau de caractère :

// .h

.....

public

    unsigned char * montableau;

......

//.cpp

            myfile.read((char *)montableau, taillefichier);

Se positionner à un endroit du fichier :

     myfile.seek(0);//on revient au debut du fichier

Ecrire dans un fichier le contenu d'un tableau

myfile.write((char*)montableau,taillefichier);

Traitement de textes

Si le fichier est un fichier texte, la manipulation du texte peut être facilitée par une instance de la classe QTextStream.

Initialisation

QFile montxtfile("fichier.txt");

montxtfile.open(IO_ReadOnly);

QTextStream letexte(& montextfile);

Ecrire

letexte <<"Bonjour"<<"\n"; //écriture de Bonjour avec retour à la ligne dans le fichier texte

Lecture

QString texte;

letexte>>texte; //place dans la chaîne texte la chaîne de caractère textuelle interprétable.

Remarque : La suite de caractère utilisée pour construire la valeur attribuée à la variable s'arrête dès qu'un caractère non interprétable est rencontré (espace, tabulation, saut de ligne, etc...)

Autres fonctions utilisables :

    • readLine : renvoie un QString qui contient tous les caractères entre la position courante et le saut de ligne.
    • read : renvoie un QString qui contient tous les caractères de la position courante du fichier à la fin du fichier.
    • atEnd : renvoie un booleen qui informe du fait qu'on est arrivé à la fin du fichier ou non.

Exemple :

if(fichier.open(QIODevice::ReadOnly | QIODevice::Text))

{

    QTextStream flux(&fichier);

    while(!flux.atEnd())

        texte += flux.readLine();

    fichier.close();

}

Fermeture

Un fichier ouvert doit être nécessairement fermé pour permettre d'autres ouvertures :

myfile.close();

Vérification d'existence du fichier

Cette fonction permet de savoir si le fichier existe ou non :

if (myfile.exists())

{

// traitement

}

else

QMessageBox::critical(this,"Erreur critique", "Impossible d'ouvrir le fichier "+myfile.name());


Comment choisir un fichier

On utilise la fenêtre d'ouverture de fichier.