7 I/O流

7.2 I/O流的基本概念

7.2 C++的I/O流体系

7.3 文本I/0

7.3.1 文本文件的格式化I/O

7.3.1.1 I/O流的打开模式

7.3.1.2 I/O流的状态

7.3.2 文件位置

7.3.2.1 get和put位置

7.3.2.2 seek函数的两参数版本

7.3.3 非格式化I/O

7.4 二进制I/O

7.4.1 分块读写

7.4.2 完整读写

7.4.3 字节序问题

向文件写入多字节整数,按内存地址从低到高的顺序,依次写入每一个字节:

7.4.4 数组读写

7.5 格式控制

7.5.1 流函数

流函数功能
int ios::precision(int);设置浮点精度,返回原精度
int ios::precision(void) const;获取浮点精度
int ios::width(int);设置显示域宽,返回原域宽
int ios::width(void) const;获取显示域宽
char ios::fill(char);设置填充字符,返回原字符
char ios::fill(void) const;获取填充字符
long ios::flags(long);设置格式标志,返回原标志
long ios::flags(void) const;获取格式标志
long ios::setf(long);添加格式标志位,返回原标志
long ios::setf(long, long);添加格式标志位,返回原标志
先用第二个参数将互斥域清零
long ios::unsetf(long);清除格式标志位,返回原标志
格式标志互斥域效果
ios::leftios::adjustfield左对齐
ios::rightios::adjustfield右对齐
ios::internalios::adjustfield数值右对齐,符号左对齐
ios::decios::basefield十进制
ios::octios::basefield八进制
ios::hexios::basefield十六进制
ios::fixedios::floatfield用定点小数表示浮点数
ios::scientificios::floatfield用科学计数法表示浮点数
ios::showpos正整数前面显示+号
ios::showbase显示进制前缀0或0x
ios::showpoint显示小数点和尾数0
ios::uppercase数中字母显示为大写
ios::boolalpha用字符串表示布尔值
ios::unitbuf每次插入都刷流缓冲
ios::skipws以空白字符作分隔符

7.5.2 流控制符

流控制符功能输入输出
left左对齐
right右对齐
internal数值右对齐,符号左对齐
dec十进制
oct八进制
hex十六进制
fixed用定点小数表示浮点数
scientific用科学计数法表示浮点数
(no)showpos正整数前面(不)显示+号
(no)showbase(不)显示进制前缀0或0x
(no)showpoint(不)显示小数点和尾数0
(no)uppercase数中字母(不)显示为大写
(no)boolalpha(不)用字符串表示布尔值
(no)unitbuf(不)每次插入都刷流缓冲
(no)skipws(不)以空白字符作分隔符
ws跳过前导空白字符
ends空字符
endl换行符,刷流缓冲
flush刷流缓冲
setprecision(int)设置浮点精度
setw(int)设置显示域宽
setfill(int)设置填充字符
setiosflags(long)设置格式标志
resetiosflags(long)清除格式标志

7.6 字符串流

7.7 流缓冲

缺省情况下,所有C++流都是带缓冲的。与一个流相关联的缓冲区是streambuf类型的对象。缓冲意味着当向一个输出文件流写入数据时,所输出的字节在一般情况下并不会立即被写到文件中。相反,它们会被暂时转移到一块作为输出流缓冲区的内存块中。如有以下情况之一发生:

流缓冲区立即被刷新,其中所有的数据全部转移到输出文件中。