Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::fstream从/向文件读取和追加_C++_File_Stream_Std - Fatal编程技术网

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解决了问题后,a
clear()
。seekp实际上并不需要,因为我根本没有修改put ptr。我只是没有意识到存在get ptr和put ptr。:D