Come aggiungere testo a un file di testo in C ++?


Risposte:


284

È necessario specificare la modalità aperta append come

#include <fstream>

int main() {  
  std::ofstream outfile;

  outfile.open("test.txt", std::ios_base::app); // append instead of overwrite
  outfile << "Data"; 
  return 0;
}

12
Non è necessario chiudere il file manualmente, poiché lo fa in caso di distruzione. Vedi stackoverflow.com/questions/748014 . Inoltre, <iostream> non viene utilizzato nell'esempio.
swalog,

6
Puoi usare ios :: app al posto di ios_base :: app
Trevor Hickey

4
Può usare std::ofstream::out | std::ofstream::appinvece di std::ios_base::app? cplusplus.com/reference/fstream/ofstream/open
Volomike,

6
Puoi anche fare di più nel costruttore se vuoi ridurre il codice: std :: ofstream outfile ("test.txt", std :: ios_base :: app);
palude

Non è necessario specificare outesplicitamente il flag durante l'utilizzo std::ofstream, utilizza sempre il outflag implicitamente per te. Lo stesso con la inbandiera per std::ifstream. Dovresti specificare esplicitamente i flag ine outse std::fstreaminvece lo utilizzassi .
Remy Lebeau,

12

Io uso questo codice. Si assicura che il file venga creato se non esiste e aggiunge anche un po 'di controlli di errore.

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

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;

}

28
Questo è il modo C, non C ++.
Dženan,

3
@ Dzenan. C essendo un sottoinsieme di C ++ non invalida questo approccio.
Osaid,

6
@Osaid C non è un sottoinsieme di C ++. I compilatori compilano il suo codice per la compatibilità con le versioni precedenti. Molte cose C-valid non sono C ++ - cose valide, ad es. VLA.
Stryku,

ma se vogliamo aggiungere del testo nel mezzo del file? con stile C? usando FILE * ?? "a +" o "a" con fseek () e ftell () non hanno funzionato per me
vincent thorpe

2

Potresti anche farlo in questo modo

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

1
Passare il nome file al ofstreamcostruttore apre immediatamente il file, quindi la chiamata open()successiva è ridondante.
Remy Lebeau,

1

Ho ricevuto il mio codice per la risposta da un libro intitolato "Programmazione C ++ in semplici passaggi". Il seguito potrebbe funzionare.

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

Spero che questo ti aiuta.


1

È possibile utilizzare un fstreame aprirlo con la std::ios::appbandiera. Dai un'occhiata al codice qui sotto e dovrebbe schiarirti le idee.

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

Puoi trovare maggiori informazioni sulle modalità aperte qui e sugli stream qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.