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 :

Modification d'un fichier texte


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut Modification d'un fichier texte
    Bonjour,

    Je voudrais modifier un fichier texte, en remplaçant certaines des lignes contenues dans ce fichier.

    J'arrive à écrire des lignes en fin de fichier, en ouvrant le fichier par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::ofstream fichier(fichierSignet, std::ios::out | std::ios::app);
    Par contre, lorsque j'utilise le code suivant, le contenu initial du fichier est supprimé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    std::ofstream fichier(fichierSignet, std::ios::out | std::ios::ate);
    if (fichier)
    {
           fichier.clear();
           fichier.seekp(4*i+3, ios::beg);
           fichier<<"monTexte"<<std::endl;
           fichier.close();
    }
    (i est incrémenté par une boucle for, et 4*i+3 correspond au numéro de la ligne que je veux remplacer).

    J'ai essayé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::ofstream fichier(fichierSignet, std::ios::out | std::ios::ate);
    if (fichier)
    {
           fichier.close();
    }
    C'est le même résultat.

    A part le problème de l'éffacement du fichier, je pense que mon code ne fait qu'ajouter du texte au lieu de le remplacer, et que 4*i+3 ne correspond pas à une ligne, mais à un caractère.
    Je verrais une fois que le problème sera résolu comment faire pour modifier une ligne précise.

    Merci d'avance

    (Mon projet est sous visual studio 2005, avec les MFC)

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Avec les primitives standard (je ne connais pas le reste) il n'est pas possible d'insérer/écraser du texte au milieu d'un fichier, tu vas devoir le charger entièrement, modifier le texte et le ré-écrire.

    MAT.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    OK.

    Il n'y aurait pas un autre moyen?
    Je trouve que c'est du temps de calcul inutile de faire une copie complète du fichier. Le c++ a sûrement des fonctions d'insertion et d'écrasement.

    Si personne n'a de solution, je ferais comme tu me dis, mais bon, ...

    Merci pour ta réponse

  4. #4
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    il me semble que boost::filesystem permet ce genre de choses ( voir basic_path::append() ).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    OK, je regarde ça cet après midi

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Boost.FileSystem ne sert qu'à manipuler les noms des répertoires/fichiers mais pas les fichiers en eux-mêmes (ou alors j'ai raté tout un morceau de la bibliothèque).
    En tous cas pour basic_path::append()
    template <class InputIterator>
    basic_path& append(InputIterator first, InputIterator last);

    Effects: The path elements in sequence [first,last) are appended to the stored path.
    Ca ajoute à la suite du nom du chemin.

    MAT.

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

Discussions similaires

  1. [AIDE] modification d'un fichier texte
    Par babap1 dans le forum C++
    Réponses: 6
    Dernier message: 16/01/2008, 11h49
  2. Réponses: 50
    Dernier message: 19/10/2007, 23h38
  3. modification d'un fichier texte
    Par didy59 dans le forum C
    Réponses: 2
    Dernier message: 25/11/2006, 11h38
  4. Modification d'un fichier texte
    Par velo83 dans le forum C
    Réponses: 14
    Dernier message: 21/05/2006, 07h28
  5. Réponses: 4
    Dernier message: 21/04/2006, 21h55

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