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

SL & STL C++ Discussion :

Problème avec ofstream et ios::app


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut Problème avec ofstream et ios::app
    Bonsoir à tous, j'ai un petit problème, surement rien de méchant mais je n'arrive pas à le résoudre :/

    J'ai un objet de la classe ofstream que je cré avec en paramètre un fichiers, je remplis ensuite celui-ci en récupérant à un moment ( tellp() ) l'endroit ou je me trouve .

    Une fois mon fichier créer, je fait un close . Puis un open avec le meme nom de fichier avec en flag ( ios::out | ios::app ) et je veux me placer a l'endroit sauvegarder avant .
    Je vais donc un seekp(position,ios::beg,) mais mon programme écrit toujours a la fin de ce fichier.

    Je supose que ios::app ne permet simplement pas de se placer quelquepart avant dans le fichier ouvert . Mais alors comment faire ?
    ios:trunk va me récréer un fichier vierge et ca ne m'interesse pas.

    Je veux simplement ouvrir en écriture un fichier déja existant et ajouter du texte à un endroit ... mais la je sèche !

  2. #2
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Bah, essaye sans le ios::app

    Sinon, tu devrais utiliser ios_base::app, ios_base::trunc,... au lieu de ios::

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Sans le ios::app le comportement par défaut est d'écraser le fichier si il existe deja; ios_base::app ne change rien .

    Edit: j'avais du zapper ios_base::ate , ca semble faire ce que je veux, ouvrir le fichier sans repositioner le curseur a la fin a chaque écriture, mais ca m'écrase quand même mon fichier O_o ( avec ou sans le seekp() )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		   FileStream_.open("Log/Log.xml", std::ios_base::out | std::ios_base::ate);
    			   FileStream_.seekp( WritingPos ,std::ios::beg);

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Une piste pourrâit être un flux ouvert en lecture/ ecriture ( fstream ), mais la encore le résultat n'est pas au rendez-vous . ( ou alors je m'y prend mal, je suspecte ma deuxième théorie ^^)

  5. #5
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Voici un exemple qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*
    JE SUIS LE COMMENTAIRE A CHANGER
    g++ -O3 -o seekg seekg.cpp
    */
    #include <fstream>
    using namespace std;
    int main() {
        system( "cp -f seekg.cpp seekg.out" );
        fstream file( "seekg.out", ios_base::in |  ios_base::out | ios_base::ate );
        file.seekp( 3, ios_base::beg );
        file << "J'AI CHANGE LE COMMENTAIRE      ";
    }

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Je suis presque certain d'avoir testé cette combinaison ! Je retente ce soir et je poste les résultats, merci quoi qu'il en soit !

    edit: Le problème est que le résultat n'est toujours pas comme je l'espère, en fait ca inscrit bien les données aprés, mais ca efface tout

    ex:

    Au début j'ai

    blablabla
    <-- ma position d'écriture au 2nd passage -->
    blabla


    Et quand je réécrit j'ai :

    blalba
    MonNouveauText
    MonAutrenouveautexte


    Et c'est tout , en gros ca écrit par dessus alors que je voudrai "insérer" du texte simplement ... une idée pour contourner cela ?

Discussions similaires

  1. Problème avec Ofstream
    Par azeglaoui dans le forum SL & STL
    Réponses: 18
    Dernier message: 12/10/2009, 21h17
  2. problème avec ofstream
    Par rodgeurette dans le forum SL & STL
    Réponses: 4
    Dernier message: 18/07/2007, 14h02
  3. problème avec ofstream::write
    Par b4u dans le forum SL & STL
    Réponses: 3
    Dernier message: 01/06/2006, 14h17
  4. [C++] Problème avec ofstream
    Par Mathieu.J dans le forum SL & STL
    Réponses: 4
    Dernier message: 27/03/2006, 12h51

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