202

How to append text to a text file in C++? And create a new text file if it does not already exist and append text to it if it does exist.

Tom
  • 91
  • 11
Ahmad Farid
  • 13,132
  • 45
  • 92
  • 134

6 Answers6

323

You need to specify the append open mode like

#include <fstream>

int main() {  
  std::ofstream outfile;

  outfile.open("test.txt", std::ios_base::app); // append instead of overwrite
  outfile << "Data"; 
  return 0;
}
NathanOliver
  • 150,499
  • 26
  • 240
  • 331
Bertrand Marron
  • 19,324
  • 8
  • 52
  • 88
  • 16
    No need to close the file manually, as it does so upon destruction. See http://stackoverflow.com/questions/748014/. Also, is not being used in the example. – swalog Sep 12 '13 at 15:47
  • 7
    You can use ios::app in place of ios_base::app – Trevor Hickey Jul 09 '15 at 17:50
  • 5
    Can use `std::ofstream::out | std::ofstream::app` instead of `std::ios_base::app`? http://www.cplusplus.com/reference/fstream/ofstream/open/ – Volomike Feb 25 '16 at 22:12
  • 6
    You can also do more in the constructor if you want to cut down on code: std::ofstream outfile("test.txt", std::ios_base::app); – marsh Nov 03 '16 at 17:17
  • You don't need to specify the `out` flag explicitly when using `std::ofstream`, it always uses the `out` flag implicitly for you. Same with the `in` flag for `std::ifstream`. You would have to specify the `in` and `out` flags explicitly if you were using `std::fstream` instead. – Remy Lebeau Nov 06 '19 at 22:31
  • Also instead of `std::ios_base::app` you can use shorter `std::ios::app`. – Arty Nov 05 '20 at 09:26
13

I use this code. It makes sure that file gets created if it doesn't exist and also adds bit of error checks.

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
  • 47,549
  • 10
  • 193
  • 157
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
  • 530
  • 1
  • 8
  • 23
2

I got my code for the answer from a book called "C++ Programming In Easy Steps". The could below should work.

#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;   
} 

I hope this helps you.

Kevin Anderson
  • 4,388
  • 2
  • 10
  • 20
Tom
  • 91
  • 11
2

You could use an fstream and open it with the std::ios::app flag. Have a look at the code below and it should clear your head.

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

You can find more information about the open modes here and about fstreams here.

Georgy
  • 6,348
  • 7
  • 46
  • 58
ranu
  • 477
  • 9
  • 22
2

You could also do it like this

#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
  • 123
  • 6