C++I/O流,一遍文章让你了解IO流

来源:互联网 发布:js 下拉框选中的值 编辑:程序博客网 时间:2024/06/06 09:07

I/O流

I/O流库

主要I/O流类
•I/O流类系
这里写图片描述

I/O流的打开与关闭

一.打开模式

•ios::in
–打开文件用于读取,不存在则失败,存在不清空
–适用于ifstream(缺省)/fstream

•ios::out
–打开文件用于写入,不存在则创建,存在则清空
–适用于ofstream(缺省)/fstream

•ios::app
–打开文件用于追加,不存在则创建,存在不清空
–适用于ofstream/fstream

•ios::trunc
–打开时清空原内容
–适用于ofstream/fstream

•ios::ate
–打开时定位文件尾
–适用于ifstream/ofstream/fstream

•ios::binary
–以二进制模式读写
–适用于ifstream/ofstream/fstream

•ios::trunc
–打开时清空原内容
–适用于ofstream/fstream

•ios::ate
–打开时定位文件尾
–适用于ifstream/ofstream/fstream

•ios::binary
–以二进制模式读写
–适用于ifstream/ofstream/fstream

I/O流状态

I/O流的状态成员函数
这里写图片描述

I/O流的格式化

一.I/O流格式化函数

•I/O流类(ios)定义了一组用于控制输入输出格式的公有成员函数,调用这些函数可以改变I/O流对象内部的格式状态,进而影响后续输入输出的格式化方式
这里写图片描述
这里写图片描述

•一般而言,对I/O流格式的改变都是持久的,即只要不再设置新格式,当前格式将始终保持下去

•显示域宽是个例外,通过ios::width(int)所设置的显示域宽,只影响紧随其后的第一次输出,再往后的输出又恢复到默认状态格式化函数
这里写图片描述
这里写图片描述

二.I/O流格式化控制符
这里写图片描述
这里写图片描述
这里写图片描述

二进制I/O

一.读取二进制数据

•istream& istream::read (char* buffer, streamsize num);
–从输入流中读取num个字节到缓冲区buffer中
–返回流本身,其在布尔上下文中的值,成功(读满)为true,失败(没读满)为false
–如果没读满num个字节,函数就返回了,比如遇到文件尾,最后一次读到缓冲区buffer中的字节数,可以通过istream::gcount()函数获得

二.写入二进制数据

•ostream& ostream::write (const char* buffer, streamsize num);
–将缓冲区buffer中的num个字节写入到输出流中
–返回流本身,其在布尔上下文中的值,成功(写满)为true,失败(没写满)为false

随机读写

一.设置读/写指针位置

istream& istream::seekg (off_type offset, ios::seekdir origin);
ostream& ostream::seekp (off_type offset, ios::seekdir origin);
–origin表示偏移量offset的起点
ios::beg:从文件的第一个字节
ios::cur:从文件的当前位置
ios::end:从文件最后一个字节的下一个位置

–offset为负/正表示向文件头/尾的方向偏移

–读/写指针被移到文件头之前或文件尾之后,则失败

二.获取读/写指针位置

•pos_type istream::tellg (void);
pos_type ostream::tellp (void);
–返回读/写指针当前位置相对于文件头的字节偏移量
•iostream的子类,如fstream
–同时拥有针对读/写指针位置的两套设置/获取函数
–理论上应该拥有两个相互独立的读/写指针
–多数编译器仍然使用一个指针记录文件当前位置
–建议读取时用seekg/tellg,写入时用seekp/tellp

原创粉丝点击