C++ 使用std::fstream从/向文件读取和追加
我想知道为什么下面的代码不起作用,看起来很直截了当,我犯了错误吗?C++ 使用std::fstream从/向文件读取和追加,c++,file,stream,std,C++,File,Stream,Std,我想知道为什么下面的代码不起作用,看起来很直截了当,我犯了错误吗? 这样做的结果是:创建了一个空文件,如果我手动添加这些行,这些行将与此代码一起显示,但不会发生其他任何事情 #include <fstream> #include <iostream> #include <string> using namespace std; int main(){ fstream mfile("text.txt", ios_base::in | ios_base:
这样做的结果是:创建了一个空文件,如果我手动添加这些行,这些行将与此代码一起显示,但不会发生其他任何事情
#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);
}
#包括
#包括
#包括
使用名称空间std;
int main(){
fstream mfile(“text.txt”,ios_base::in | ios_base::out | ios_base::app);
mfile.seekg(ios_base::beg);
弦线;
while(getline(mfile,line)){
std::cout两件事:
当您准备好编写时,您需要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;
}
字符串行;
mfile.seekg(ios_base::beg);
while(getline(mfile,line)){
std::您是否正在尝试向文件写入内容?此代码没有这样做。mfile更正了什么!!!问题出在标记上。在getlines解决了问题后,aclear()
。seekp实际上并不需要,因为我根本没有修改put ptr。我只是没有意识到存在get ptr和put ptr。:D