【Primer C++学习笔记】8. IO库

8. IO库

i读o写

8.1 IO类

8.1.1 IO对象无拷贝或赋值

8.1.2 条件状态

8.1.3 管理输出缓冲

8.2 文件输入输出

8.2.1 使用文件流对象

8.2.2 文件模式

8.3 string流

8.3.1 使用istringstream

8.3.2 使用ostringstream 


8.1 IO类

  • iostream定义了用于读写流的基本类型;
  • fstream定义了读写命名文件的类型;
  • sstream定义了读写内存string对象的类型;

宽字符版本的类型和函数的名字以一个w开始。

8.1.1 IO对象无拷贝或赋值

不能拷贝或对IO对象赋值,也不能将形参或返回类型设置为流类型,IO操作通常以引用方式传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的。

8.1.2 条件状态

 

查询流的状态:auto state = cin.rdstate();

为了在使用一个流之前检查它是否处于良好状态:

 

8.1.3 管理输出缓冲

导致缓冲刷新(数据真正写到输出设备或文件)的原因:

  • 程序正常结束,作为main函数的return操作的一部分;
  • 缓冲区满,刷新缓冲后新的数据才能继续写入缓冲区;
  • 使用endl显式刷新缓冲区;
  • ......

8.2 文件输入输出

fstream定义了三个类型支持文件IO:

  • ifstream从一个给定文件读取数据;
  • ofstream向一个给定文件写入数据;
  • fstream读写给定文件;

8.2.1 使用文件流对象

如果提供了一个文件名,open会自动被调用。定义一个输入流in,文件名由string类型的参数ifile指定(也可以时C风格字符数组)。定义一个输出流out不与任何文件关联,随后调用open将它与文件关联起来。

 由于调用open可能失败,最好检测一下open是否成功:

8.2.2 文件模式

无论用哪种方式打开文件(用open打开文件、用一个文件名初始化流隐式打开文件)都可以指定文件模式:

以out模式打开文件会丢弃已有数据,组织一个ofstream清空给定文件内容的方法是同时指定app模式:

每次调用open时都会确定文件模式,对于一个给定流每当打开文件时,都可以改变其文件模式:


8.3 string流

sstream定义了三个类型支持内存IO,就像是string是一个IO流一样:

  • istringstream从string读取数据;
  • ostringstream向string写入数据;
  • stringstream可以读写数据;

8.3.1 使用istringstream

假定有一个文件列出了一些人和他们的电话号码:

首先定义一个类描述输入数据:

程序用于读取数据文件并创建一个PersonInfo的vector,vector中每个元素对应文件中的一条记录:

 

8.3.2 使用ostringstream 

此程序中假定已有两个函数valid和format,分别完成电话号码验证和改变格式的功能。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值