IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

lecture / écriture dans des fichiers text


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut lecture / écriture dans des fichiers text
    Bonjour,
    j'ai une question à propos de la lecture et écriture dans des fichiers textes.
    Dans le meme code je voulais ecrire et après lire à partir d'un fichier texte, en appelant les fonctions dans l'ordre suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fstream myfile ("file.txt", ios::in | ios::out);
    .
    .
    myfile.open("file.txt", ios::out);
    //operation d'ecriture dans le fichier file.txt
    myfile.close();
    .
    myfile.open("file.txt", ios::in);
    //operation de lecture à partir du fichier file.txt
    myfile.close();
    le soucis est que quand je démarre la simulation une deuxième fois pour réecrir dans le meme fichier, le code echoue de réouvrir le fichier et son contenu reste le meme que celui d'avant.

    Dois-je ajouter une autre instruction pour que le fichier en question soit reinitialiser a chaque simulation? et si c'est le cas laquelle?

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Il doit par défaut écrire dans le mode append.

    Mais je ne maîtrise pas trop les flux d'entrée/sortie...

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    le constructeur ouvre le fichier. Open échoue si le fichier est déjà ouvert.
    Pourquoi réutiliser 3 fois la même variable et fichier ? Tu peux te contenter de l'ouvrir une fois en inout et ne le refermer qu'après en avoir terminé.

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Hello

    Bousk a raison : tu n'as pas besoin de fermer et de ré-ouvrir le fichier.

    En revanche, il y a une petite subtilité lorsque tu fais de l'écriture et de la lecture en même temps : il faut prendre garde à la position des curseurs de put et de get. Voici un petit programme qui ajoute l'heure courante dans le fichier puis affiche tout son contenu. Tu verras qu'en l'exécutant plusieurs fois à la suite, on récupère bien les données précédentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <iostream>
    #include <iomanip>
    #include <ctime>
    #include <fstream>
    #include <string>
     
    std::ostream & format_2_l0(std::ostream & iStream)
    {
      return iStream << std::setw(2) << std::setfill('0');
    }
     
    int main(int argc, char* argv[])
    { 
      std::string my_file("file.txt");
      std::fstream file_p(my_file.c_str(), std::ios::in | std::ios::app); // <- Pour ajouter à la fin du contenu
      // std::fstream file_out(my_file, std::ios::in | std::ios::out); // <- Pour écraser le contenu
      if(file_p)
      {
        // Ecrire
        std::time_t now = std::time(0);
        std::tm * tm_now = std::localtime(&now);
        format_2_l0(file_p) << tm_now->tm_hour << "h";
        format_2_l0(file_p) << tm_now->tm_min << " ";
        format_2_l0(file_p) << tm_now->tm_sec << "s";
        file_p << std::endl;
     
        // Lire
        std::string ligne;
        file_p.seekg(0,std::ios::beg);
        while ( std::getline( file_p, ligne ) )
          std::cout << ligne << std::endl;
     
     
        file_p.close();
      }
      return 0;
    }
    Le ligne importante à retenir est celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_p.seekg(0,std::ios::beg);
    Elle repositionne le curseur de lecture au début du fichier avant d'effectuer la lecture.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Salut, justement l'écriture et la lecture se font au même temps, et si j'ouvre le fichier et ne le fermer qu'à la fin, je reccupère pas les bonne données.

    merci pour vos réponses

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Citation Envoyé par nadir CoCo Voir le message
    Salut, justement l'écriture et la lecture se font au même temps, et si j'ouvre le fichier et ne le fermer qu'à la fin, je reccupère pas les bonne données.
    Si tu fais comme je te montre, tu récupéreras la bonne donnée y compris en ne le fermant qu'une fois à la fin.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Ok, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture-écriture dans un fichier text
    Par guefrachi dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 29/07/2010, 20h28
  2. la lecture et l’écriture dans des fichiers textes en java
    Par blackhock dans le forum Général Java
    Réponses: 2
    Dernier message: 06/05/2009, 17h10
  3. lecture/écriture dans un fichier texte
    Par the watcher dans le forum Delphi
    Réponses: 23
    Dernier message: 15/05/2007, 10h57
  4. Réponses: 47
    Dernier message: 28/01/2007, 19h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo