ifstream input( argv[1] );
ofstream output( argv[2] );
Sales_data total;
if(read( input, total))
{
Sales_data trans;
while( read( input, trans))
{
if(total.isbn() == trans.isbn() )
total.combine( trans );
else
{
print( output, total ) << endl;
total = trans;
}
}
print(output, total) << endl;
}
else
cerr << "No data?!" << endl;
再要求使用基类型对象的地方,我们可以用继承类型的对象来替代。即可以在形参为istream和ostream的地方传递fstream对象。
in | 以读方式打开 |
out | 以写方式打开 |
app | 每次写操作前均定位到文件末尾 |
ate | 打开文件后立即定位到文件末尾 |
trunc | 截断文件 |
binary | 以二进制方式进行IO |
指定文件模式有以下限制:
- 只可以对ofstream或fstream对象设定out模式
- 只可以对ifstrean或fstream对象设定in模式
- 只有当out也被设定时才可设为trunc模式
- 只要trunc没被设定,就可以设定app模式。在app模式下,即使没有显式指定out模式,文件也总以输出方式打开
- 默认情况下,即使没有指定trunc,以out模式打开的文件也会被截断(即打开文件的内容丢失)
- ate和binary模式可用于任何类型的文件流对象。且可以和其他任何文件模式组合使用。