如何在C ++中将文本追加到文本文件?


Answers:


281

您需要指定追加打开模式,例如

#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>。
swalog 2013年

6
您可以使用ios :: app代替ios_base :: app
Trevor Hickey 2015年

4
可以std::ofstream::out | std::ofstream::app代替使用std::ios_base::app吗?cplusplus.com/reference/fstream/ofstream/open
Volomike '16

6
如果您想减少代码,也可以在构造函数中做更多的事情:std :: ofstream outfile(“ test.txt”,std :: ios_base :: app);
沼泽

out使用时无需显式指定标志std::ofstream,它始终out为您隐式使用标志。与的in标志相同std::ifstream。如果要改用,则必须显式指定inand 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;

}

28
这是C方式,而不是C ++。
Dženan

3
@哲南 C作为C ++的子集不会使这种方法无效。
2014年

6
@Osaid C不是C ++的子集。编译器编译其代码以实现向后兼容。许多C合法的东西不是C ++合法的东西,例如VLA。
stryku

但是如果我们想在文件中间添加文本?用C风格?使用FILE * ?? fseek()和ftell()的“ a +”或“ a”不适用于我
Vincent Thorpe

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

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";
...

您可以在此处找到有关打开模式以及在此处有关fstream的更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.