C++ 中的流操作

来源:互联网 发布:引物分析软件 编辑:程序博客网 时间:2024/06/05 14:42

C++中IO操作都可以用流对象来实现,一般有三种流对象:

1)控制台流对象: istream, ostream, iostream

2)文件流对象: fstream, ifstream, ofstream

3)字符串流对象: stringstream, istringstream, ostringstream

以上三种流类的读写都是以char 类型组成的流,对于wchar_t ,C++中定义了相应的宽字符流对象

流对象不支持复制操作,因此不能保存在vector 对象中

 

流对象的条件状态:由于记录读写过程中是否发生错误,其类型为iostate, 常用的有三种取值:

badbit: 系统发生不可修复错误

failbit: 此流错误可修复

eofbit: 达到文件末尾

 

流对象定义的几个成员函数用于获取或设置其条件状态:

s.bad(), s.fail(), s.eof(), 若以上三个函数返回值都为false, s.good()返回true, 此外

s.clear(): 将条件重设为有效状态

s.setstate(): 设置某个条件状态,以表示某个问题的发生

s.rdstate(): 返回一个 iostate 类型值,该值对应于流当前的整个条件状态

 

每个流对象管理一个输出缓冲区,执行输出操作时先将数据输出到输出缓冲区中,要刷新缓冲区才能将数据写入到真是的输出设备或文件,有以下几种方法可以刷新缓冲区:

1. 程序正常结束。作为 main 返回工作的一部分,将清空所有输出缓冲区。

2. 在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。

3. 用操纵符显式地刷新缓冲区,例如行结束符 endl。

4. 在每次输出操作执行完后,用 unitbuf 操作符设置流的内部状态,从而清空缓冲区。

5. 可将输出流与输入流关联(tie)起来。在这种情况下,在读输入流时将刷新其关联的输出缓冲区(常用在交互式系统下,确保给用户的提示在读取用户的输入之前都已输出)。

 

原创粉丝点击