Как добавить текст в текстовый файл в C ++?

180

Как добавить текст в текстовый файл в C ++? И создайте новый текстовый файл, если он еще не существует, и добавьте к нему текст, если он существует.

Ахмад Фарид
источник

Ответы:

284

Вам нужно указать режим открытия приложения, например:

#include <fstream>

int main() {  
  std::ofstream outfile;

  outfile.open("test.txt", std::ios_base::app); // append instead of overwrite
  outfile << "Data"; 
  return 0;
}
Бертран Маррон
источник
12
Не нужно закрывать файл вручную, так как это происходит при уничтожении. См. Stackoverflow.com/questions/748014 . Кроме того, <iostream> не используется в этом примере.
Сулог
6
Вы можете использовать ios :: app вместо ios_base :: app
Тревор Хикки
4
Можно использовать std::ofstream::out | std::ofstream::appвместо std::ios_base::app? cplusplus.com/reference/fstream/ofstream/open
Volomike
6
Вы также можете сделать больше в конструкторе, если хотите сократить код: std :: ofstream outfile ("test.txt", std :: ios_base :: app);
болотный
Вам не нужно указывать outфлаг явно при использовании std::ofstream, он всегда использует outфлаг неявно для вас. То же самое с inфлагом для std::ifstream. Вы должны были бы указать inи outфлаги явно, если бы вы использовали std::fstreamвместо этого.
Реми Лебо
12

Я использую этот код. Он гарантирует, что файл создается, если он не существует, а также добавляет бит проверки ошибок.

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;

}
Osaid
источник
28
Это путь C, а не C ++.
Дженан
3
@ Dženan. C, являющийся подмножеством C ++, не лишает законной силы этот подход.
Osaid
6
@Osaid C не является подмножеством C ++. Компиляторы компилируют его код для обратной совместимости. Многие C-правильные вещи не являются C ++ - действительными, например, VLA.
стрику
но если мы хотим добавить текст в середине файла? со стилем С? используя FILE * ?? «a +» или «a» с fseek () и ftell () у меня не сработали
Винсент Торп
2

Вы также можете сделать это так

#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
источник
1
Передача имени файла ofstreamконструктору немедленно открывает файл, поэтому open()последующий вызов является излишним.
Реми Лебо
1

Я получил свой код для ответа из книги под названием «Программирование на C ++ за несколько шагов». Может ниже может работать.

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

Я надеюсь, это поможет вам.

Том
источник
1

Вы можете использовать fstreamи открыть его с std::ios::appфлагом. Посмотрите на код ниже, и он должен очистить вашу голову.

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

Вы можете найти больше информации об открытых режимах здесь и о fstreams здесь .

ranu
источник