【发布时间】:2012-09-12 21:51:40
【问题描述】:
在调试别人的代码时,我遇到了 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");
这是预期的行为吗?是否不能使用 ios::app 打开 fstream 对象并期望通过流运算符的输入行为正确?
在 64 位 Linux 上使用 g++ 4.6.3 编译,在 32 位 Windows 7 上使用 mingw-g++ 4.4.1 编译
【问题讨论】:
-
这个玩具示例是在从 Murphy Set 中移除几个项目后创建的。
标签: c++ io append iostream fstream