我想知道为什么下面这段代码不起作用,看起来很简单,我是不是搞错了?
这样做的结果是:文件已创建但为空,如果我手动添加行,这些行将与此代码一起显示,但不会发生其他任何事情。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main(){
fstream mfile("text.txt", ios_base::in | ios_base::out | ios_base::app);
mfile.seekg(ios_base::beg);
string line;
while( getline(mfile,line) ){
std::cout << line << "\n";
}
mfile.seekg(ios_base::end);
mfile << "Line 1\n";
mfile << "Line 2\n";
mfile << "---------------------------------\n";
mfile.seekg(ios_base::beg);
while( getline(mfile,line) ){
std::cout << line << "\n";
}
mfile.seekg(ios_base::end);
}
最佳答案
一些事情:
当你准备写的时候,你需要seekp()
而不是seekg()
,即
mfile.seekp(ios_base::end);
现在,这里的问题是 getline()
调用将设置流标志(特别是 eof),因此流还没有准备好进行进一步的操作,您需要清除先插旗!
试试这个:
string line;
mfile.seekg(ios_base::beg);
while( getline(mfile,line) ){
std::cout << line << endl;
}
mfile.seekp(ios_base::end); // seekp
mfile.clear(); // clear any flags
mfile << "Line 1" << endl; // now we're good
mfile << "Line 2" << endl;
mfile << "---------------------------------" << endl;
mfile.seekg(ios_base::beg);
while( getline(mfile,line) ){
std::cout << line << endl;
}
此外,使用 std::endl 而不是“\n”,这将在操作系统方便时触发将缓冲区刷新到文件...
关于c++ - 使用 std::fstream 从文件读取和追加文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4100880/