我有以下代码

#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 的末尾。如何读取然后写入文件?

最佳答案

纳瓦兹的评论是正确的。您的读取循环会不断迭代,直到 fstream::operator bool (来自 ofile )返回 false。因此,在循环之后,必须设置 failbit 或 badbit。当循环尝试最后一次读取时设置失败位,但只剩下 EOF 可供读取。完全可以,但是在尝试再次使用流之前,您必须重置错误状态标志。

// ...
ofile.clear();
ofile << "stackexchnange" << endl;

关于c++ - 如何在c++中同时使用 `fstream`读写文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32435991/

10-11 23:07