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 :

Comment copier dans un fichier sans écraser son contenu principal ?


Sujet :

C++

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Comment copier dans un fichier sans écraser son contenu principal ?
    Bonjour,

    J'ai réussi à faire en programme en C++ qui permet de copier le contenu d'un fichier à un autre ..mais mon problème est qu'après la copie, le contenu principale de mon fichier destinateur est écrasé ( bien que mon but est d'ajouter le contenu de fichier source au fichier destinateur)
    voici le code
    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
    #include <fstream>
    #include <iostream>
    using namespace std;
    int main()
    {
        std::ifstream src("/home/ahlem/Bureau/cap1.txt");
        std::ofstream dst("/home/ahlem/bin/write.c");
     
        dst<<src.rdbuf();
     
      src.close();
      dst.close();
     
    cout << "la copie est terminée :)"; 
     
    return 0;
    }
    quelqu'un a une idée please

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    As-tu essayé d'ouvrir ton fichier en mode append ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Bonjour,

    As-tu essayé d'ouvrir ton fichier en mode append ?
    merci beaucoup Neckara, ça marche bien
    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
    #include <fstream>
    #include <iostream>
    using namespace std;
    int main()
    {
        std::ifstream src("/home/ahlem/Bureau/cap1.txt", ifstream::in );
        std::ofstream dst("/home/ahlem/bin/write.c", ifstream::app );
     
        dst<<src.rdbuf();
     
      src.close();
      dst.close();
     
    cout << "la copie est terminée :)"; 
     
    return 0;
    }
    mais maintenant j'aime mettre la phrase, que j'ai entrain de la copier, à la 31ième ligne et à la 25ième colonne du texte de fichier destinateur .........avez-vous une idée comment je puisse faire ça ???

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Tu ne peux pas faire grand'chose avec des fichiers : Tu peux lire, remplacer un contenu par un autre, ou bien ajouter des choses à la fin, et c'est à peu près tout. En particulier, tu ne peux pas insérer d'éléments au milieux.

    Comment faire donc ? Et bien, le mieux est de travailler en mémoire. Par exemple, si tes fichiers sont de taille raisonnable, tu charge les deux dans un string, tu modifies le string, puis tu sauves le string dans un fichier (soit en écrasant le second fichier, soit pour être plus sûr en faisant un troisième fichier, que tu échangera ensuite avec le second, comme ça même en cas de problème, tu as toujours tes données quelque-part).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    tu charge les deux dans un string, tu modifies le string, puis tu sauves le string dans un fichier (soit en écrasant le second fichier, soit pour être plus sûr en faisant un troisième fichier, que tu échangera ensuite avec le second, comme ça même en cas de problème, tu as toujours tes données quelque-part).
    merci pour la réponse JolyLoic j'ai chargé les 2 fichiers dans un string mais je ne sais pas commet je peut faire la modification dans le string
    vraiment je suis débutante et je connait pas trop en programmation ...as-tu une idée plz?

  6. #6
    Candidat au Club
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Pour pouvoir se déplacer dans un fichier, on va devoir déplacer le curseur. Pour cela on peut utiliser la fonction seekg(déplacement, position) pour les fichiers en lecture, ou bien la fonction seekp(déplacement, position) pour les fichiers en écriture.
    le déplacement est un entier qui représente le nombre de caractères qu'on veut échapper et position représente la position à partir de laquelle on veut se déplacer (début du fichier. fin du fichier. position courante...etc).
    Le début du fichier : ios::beg.
    La fin du fichier : ios::end.
    La position actuelle : ios::cur.
    Exemple: fichier.seekg(0, ios::end); //On se déplace a la fin du fichier

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    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
    #include <string>
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
       string s = R"(Ceci est
    une chaine
    multiligne)";
     
       cout << s << endl << "---------------" << endl;
       size_t sep1 = s.find('\n');
       size_t sep2 = s.find('\n', sep1+1);
     
       s.insert(sep2+1, "vraiment ");
       cout << s << endl << "---------------" << endl;
    }
    Remarque : Si ton compilateur ne comprends pas le R"(...)", ce n'est pas grave, ce n'est pas ça qui compte, mais la suite du code.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Bonjour ;
    merci beaucoup d'avoir me répondre saidmatrix et Joly Loic
    Pour pouvoir se déplacer dans un fichier, on va devoir déplacer le curseur. Pour cela on peut utiliser la fonction seekg(déplacement, position) pour les fichiers en lecture, ou bien la fonction seekp(déplacement, position) pour les fichiers en écriture.
    saidmatrix: j'ai déja utiliser cette méthode dans mon code mais elle me donne rien car mon but est se déplacer à un ligne bien déterminé dans le fichier pour mettre la phrase copié ( j'ai déja posé ça au début de discussion).
    Joly Loic : voilà le code que je l'utilise pour charger les deux fichiers dans une seul string
    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
    #include <iostream>
    #include <fstream>
    #include <string>
     
    using namespace std;
     
    int main (void)
    {
    string s1, s2, s3;
     
       std::ifstream fichier("/home/ahlem/Bureau/cap1.txt");
     if( fichier )
    {
    while(getline(fichier,s1))
    {
      std::cout<<s1<<std::endl;
    }
    }
     std::ifstream fichier1("/home/ahlem/Bureau/Capture.txt");
     
     if( fichier1 )
     
    {
    while(getline(fichier1,s2))
    {
      std::cout<<s2<<std::endl;
    }
    }
    s3 = s1 + s2;
      cout << s3 << endl;
     
      return 0;
     
    }
    j'aime bien savoir comment je dois insérer le code que te m'envoyer dans mon programme et le role de ces 2 instructions :
    size_t sep1 = s.find('\n');
    s.insert(sep2+1, "vraiment ");

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Donc, contrairement à ce que tu disais, tu n'a pas mis tout le fichier dans ta string, mais tu lis le fichier ligne par ligne stockant chaque ligne dans la même string (en écrasant la ligne qui s'y trouve déjà).

    Ce n'est pas plus mal comme méthode, étant donné que tu veux justement compter les lignes...

    Normalement, tu as toutes les pièces du puzzle pour faire ce que tu veux. L'idée est de lire ligne à ligne, comme tu le faire, mais en incrémentant un compteur de ligne. A chaque nouvelle ligne, tu la recopies dans un fichier en sortie. Si tu atteins la ligne que tu veux, là tu bascules sur le second fichier, puis après tu reviens au premier.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Bonjour ;
    enfin j'ai trouvé une solution à mon problème et ça marche bien ...merci pour vos réponces, merci à tous
    voilà le code :
    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
    #include <iostream>
    #include <fstream>
    #include <string>
     
    using namespace std;
     
    int main (void)
    {
       string s1, s2, s3 ;
       ofstream objetfichier;
     objetfichier.open("/home/ahlem/Bureau/monfichier.txt", ios::out); //on ouvrre le fichier en ecriture
       std::ifstream fichier("/home/ahlem/Bureau/protocole.txt");
       std::ifstream fichier1("/home/ahlem/Bureau/cap1.txt");
         while (getline(fichier1, s2))
              {    
                  getline(fichier, s1);
                   s3 = s1 + s2;
    objetfichier << s3 << endl;
    }
    objetfichier.close();
    }

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

Discussions similaires

  1. [XL-2000] écrire dans une cellule sans écraser son contenu
    Par mollus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/06/2011, 14h44
  2. Réponses: 1
    Dernier message: 01/06/2009, 05h12
  3. [JDOM] comment écrire dans un fichier xml sans écraser son contenu
    Par solawe dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 25/03/2008, 14h11
  4. [VBA-E] Ecrire dans une cellule sans écraser son contenu
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2007, 15h43
  5. Réponses: 6
    Dernier message: 23/12/2005, 18h24

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