Comment ajouter du texte à un fichier texte en C ++?

Réponses:

284

Vous devez spécifier le mode d'ouverture d'ajout comme

#include <fstream>

int main() {  
  std::ofstream outfile;

  outfile.open("test.txt", std::ios_base::app); // append instead of overwrite
  outfile << "Data"; 
  return 0;
}
Bertrand Marron
la source
12
Pas besoin de fermer le fichier manuellement, car il le fait lors de la destruction. Voir stackoverflow.com/questions/748014 . De plus, <iostream> n'est pas utilisé dans l'exemple.
swalog le
6
Vous pouvez utiliser ios :: app à la place de ios_base :: app
Trevor Hickey
4
Peut utiliser à la std::ofstream::out | std::ofstream::appplace de std::ios_base::app? cplusplus.com/reference/fstream/ofstream/open
Volomike
6
Vous pouvez également en faire plus dans le constructeur si vous souhaitez réduire le code: std :: ofstream outfile ("test.txt", std :: ios_base :: app);
marsh
Vous n'avez pas besoin de spécifier l' outindicateur explicitement lors de l'utilisation std::ofstream, il utilise toujours l' outindicateur implicitement pour vous. Idem avec le indrapeau pour std::ifstream. Vous devrez spécifier les indicateurs inet outexplicitement si vous utilisiez à la std::fstreamplace.
Remy Lebeau
12

J'utilise ce code. Il s'assure que ce fichier est créé s'il n'existe pas et ajoute également des vérifications d'erreurs.

static void appendLineToFile(string filepath, string line)
{
    std::ofstream file;
    //can't enable exception now because of gcc bug that raises ios_base::failure with useless message
    //file.exceptions(file.exceptions() | std::ios::failbit);
    file.open(filepath, std::ios::out | std::ios::app);
    if (file.fail())
        throw std::ios_base::failure(std::strerror(errno));

    //make sure write fails with exception if something is wrong
    file.exceptions(file.exceptions() | std::ios::failbit | std::ifstream::badbit);

    file << line << std::endl;
}
Shital Shah
la source
11
 #include <fstream>
 #include <iostream>

 FILE * pFileTXT;
 int counter

int main()
{
 pFileTXT = fopen ("aTextFile.txt","a");// use "a" for append, "w" to overwrite, previous content will be deleted

 for(counter=0;counter<9;counter++)
 fprintf (pFileTXT, "%c", characterarray[counter] );// character array to file

 fprintf(pFileTXT,"\n");// newline

 for(counter=0;counter<9;counter++)
 fprintf (pFileTXT, "%d", digitarray[counter] );    // numerical to file

 fprintf(pFileTXT,"A Sentence");                   // String to file

 fprintf (pFileXML,"%.2x",character);              // Printing hex value, 0x31 if character= 1

 fclose (pFileTXT); // must close after opening

 return 0;

}
Osaid
la source
28
C'est la manière C, pas C ++.
Dženan le
3
@ Dženan. C étant un sous-ensemble de C ++ n'invalide pas cette approche.
Osaid
6
@Osaid C n'est pas un sous-ensemble de C ++. Les compilateurs compilent son code pour une compatibilité descendante. Beaucoup de choses valides C ne sont pas valides C ++, par exemple VLA.
stryku
mais si nous voulons ajouter du texte au milieu du fichier? avec le style C? en utilisant FILE * ?? "a +" ou "a" avec fseek () et ftell () n'a pas fonctionné pour moi
vincent thorpe
2

Tu pourrais aussi le faire comme ça

#include <fstream>

int main(){   
std::ofstream ost {outputfile, std::ios_base::app};

ost.open(outputfile);
ost << "something you want to add to your outputfile";
ost.close();
return 0;
}
vveil
la source
1
Passer le nom de fichier au ofstreamconstructeur ouvre le fichier immédiatement, donc appeler open()après est redondant.
Remy Lebeau
1

J'ai obtenu mon code pour la réponse dans un livre intitulé "Programmation C ++ en étapes faciles". Le pourrait ci-dessous devrait fonctionner.

#include <fstream>
#include <string>
#include <iostream>

using namespace std;

int main()
{
    ofstream writer("filename.file-extension" , ios::app);

    if (!writer)
    {
        cout << "Error Opening File" << endl;
        return -1;
    }

    string info = "insert text here";
    writer.append(info);

    writer << info << endl;
    writer.close;
    return 0;   
} 

J'espère que ceci vous aide.

À M
la source
1

Vous pouvez utiliser un fstreamet l'ouvrir avec le std::ios::appdrapeau. Jetez un œil au code ci-dessous et il devrait vous éclaircir la tête.

...
fstream f("filename.ext", f.out | f.app);
f << "any";
f << "text";
f << "written";
f << "wll";
f << "be append";
...

Vous pouvez trouver plus d'informations sur les modes ouverts ici et sur les fstreams ici .

ranu
la source