0

在调试别人的代码时,我遇到了 C++fstream对象之间的交互,通过流运算符输入,ios::app而我以前不知道。

假设file.txt存在并包含文本数据。在fstream其原始上下文中,它是长期存在的,并为输入和输出服务。以下代码未按预期工作(不提供文件输出),已省略错误处理代码:

#include <string>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream f("file.txt", ios::app);
    string in;
    f >> in;
    cout << in << endl;
    f.close();
    return 0;
}

将文件打开语句更改为以下内容可解决此问题:

fstream f("file.txt");

这是预期的行为吗?是否不能fstream使用 ios::app 打开一个对象并期望通过流操作符输入的行为正确?

在 64 位 Linux 上使用 g++ 4.6.3 编译,在 32 位 Windows 7 上使用 mingw-g++ 4.4.1 编译

4

1 回答 1

3

如果您检查std::fstream构造函数,您会注意到默认参数是标志位域ios_base::inios_base::out. 通过仅ios_base::app作为标志提供,您可以使文件仅附加。如果你想要输入追加,那么你必须使用 eg ios::in | ios::app

于 2012-09-20T14:01:03.760 回答