Wie füge ich Text an eine Textdatei in C ++ an?

Antworten:

283

Sie müssen den Append Open-Modus wie angeben

#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
quelle
12
Die Datei muss nicht manuell geschlossen werden, da dies bei der Zerstörung der Fall ist. Siehe stackoverflow.com/questions/748014 . Außerdem wird im Beispiel <iostream> nicht verwendet.
Swalog
6
Sie können ios :: app anstelle von ios_base :: app
Trevor Hickey
4
Kann std::ofstream::out | std::ofstream::appanstelle von verwenden std::ios_base::app? cplusplus.com/reference/fstream/ofstream/open
Volomike
6
Sie können im Konstruktor auch mehr tun, wenn Sie den Code reduzieren möchten: std :: ofstream outfile ("test.txt", std :: ios_base :: app);
Sumpf
Sie müssen das outFlag bei der Verwendung nicht explizit angeben std::ofstream, es verwendet das outFlag immer implizit für Sie. Gleiches gilt für die inFlagge für std::ifstream. Sie müssten die Flags inund outexplizit angeben, wenn Sie std::fstreamstattdessen verwenden würden.
Remy Lebeau
12

Ich benutze diesen Code. Es stellt sicher, dass die Datei erstellt wird, wenn sie nicht vorhanden ist, und fügt auch einige Fehlerprüfungen hinzu.

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
quelle
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
quelle
28
Dies ist C-Weg, nicht C ++.
Dženan
3
@ Dženan. C als Teilmenge von C ++ macht diesen Ansatz nicht ungültig.
Osaid
6
@Osaid C ist keine Teilmenge von C ++. Compiler kompilieren ihren Code aus Gründen der Abwärtskompatibilität. Viele C-gültige Dinge sind nicht C ++ - gültige Dinge, z. B. VLA.
Stryku
aber wenn wir Text in der Mitte der Datei anhängen wollen? mit C-Stil? mit FILE * ?? "a +" oder "a" mit fseek () und ftell () hat bei mir nicht funktioniert
Vincent Thorpe
2

Sie könnten es auch so machen

#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
quelle
1
Wenn Sie den Dateinamen an den ofstreamKonstruktor übergeben, wird die Datei sofort geöffnet, sodass ein anschließender Aufruf open()überflüssig ist.
Remy Lebeau
1

Ich habe meinen Code für die Antwort aus einem Buch namens "C ++ Programming In Easy Steps" erhalten. Das könnte unten funktionieren.

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

Ich hoffe das hilft dir.

Tom
quelle
1

Sie können ein verwenden fstreamund es mit der std::ios::appFlagge öffnen . Schauen Sie sich den Code unten an und er sollte Ihren Kopf frei machen.

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

Sie können weitere Informationen zu den offenen Modi finden hier und über fstreams hier .

Ranu
quelle