fstream读取文件内容为空,大伙,多谢

fstream读取文件内容为空,求助大伙,谢谢!
小弟写了一段代码读取文件demo.txt中的内容,文件中有一行,但打印的buffer内容为空,代码如下:

int main()
{
    fstream src_file;
    string buffer;
    src_file.open("demo.txt", std::ios_base::in);
    while (!src_file.eof())
    {
        src_file >> buffer;
    }
    cout << buffer << endl;
    src_file.close();
    system("pause");

    return 0;
}

------解决思路----------------------
fstream src_file;
好像是应该用
ifstream src_file;
------解决思路----------------------
把cout那一行拿到循环里面
    while (!src_file.eof())
    {
        src_file >> buffer;
    cout << buffer << endl;
    }

------解决思路----------------------
引用:
为什么要这样做呢?难道是每次读入都会将buffer清空么?那如果要读入整个文件的内容呢?

src_file >> buffer; 这个动作会用新读入的内容覆盖buffer原来的内容。
要读入整个文件,可以考虑再定义一个string line; 用getline每次读一行到line里面,在用buffer += line; 之类的把line加到buffer里面
------解决思路----------------------
引用:
Quote: 引用:

为什么要这样做呢?难道是每次读入都会将buffer清空么?那如果要读入整个文件的内容呢?

src_file >> buffer; 这个动作会用新读入的内容覆盖buffer原来的内容。
要读入整个文件,可以考虑再定义一个string line; 用getline每次读一行到line里面,在用buffer += line; 之类的把line加到buffer里面

读入整个文件还是使用istreambuf_iterator直接通过string的range构造函数一次构建出比较好,所有控制字符都可以保留而且效率高很多
------解决思路----------------------
引用:
Quote: 引用:

把cout那一行拿到循环里面
    while (!src_file.eof())
    {
        src_file >> buffer;
    cout << buffer << endl;
    }

为什么要这样做呢?难道是每次读入都会将buffer清空么?那如果要读入整个文件的内容呢?


每次读入都会覆盖buffer.
------解决思路----------------------
ifstream src_file("demo.txt");
    string buffer;
     while(src_file >> buffer)
    {
       cout << buffer << endl;
    }
   

------解决思路----------------------

ifstream file("demo.txt");
string text=string(istreambuf_iterator<char>(file),istreambuf_iterator<char>());
cout<<text;

需要读整个文件的话拿string做buffer循环输入效率实在太低,直接使用ifstream的streambuf会快很多,而且代码简单
------解决思路----------------------


using namespace std;

int main()
{
    fstream src_file;
    string buffer;
src_file.open("demo.txt", std::ios_base::in);
if(src_file.is_open())
{
while (!src_file.eof())
{
src_file >> buffer;
}
}
    cout << buffer << endl;
    src_file.close();
    system("pause");

    return 0;
}



和你的一样,可以输出结果啊