我有以下代码
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main(void) {
fstream ofile;
ofile.open("test.txt", ios::in | ios::out | ios::app);
for(string line; getline(ofile, line) ; ) {
cout << line << endl;
}
ofile << "stackexchnange" << endl;
ofile.close();
return 0;
}
test.txt
包含内容
hello world!
stackoverflow
上面的代码输出
hello world!
stackoverflow
运行代码后,stackexchange
没有被追加到 test.txt
的末尾。如何在读取文件后进行写入?
ofile.clear();
清除流的状态,因为一旦退出循环,流就会被设置为 badbit 或其他状态,这时你需要在继续执行任何操作之前调用clear()
方法进行清除。这只是我的猜测,我并不确定。 - Nawazofile << "stackexchange" << endl;
之后测试流状态,你会发现它失败了,告诉你出了问题。如果你在写入任何内容之前也测试状态,你会发现流状态在尝试写入之前就已经不好了。 - Jonathan Wakelystd::cerr
写入是多余的(坚持使用异常或return 1
!),而且还缺少一个终止分号... - Lightness Races in Orbit