C++primer(第五版)第八章(IO库)

8.1 IO库

上表中以w开头的类型和函数是C++标准库为了支持使用宽字符的语言而定义的一组类型和对象来操纵wchar_t类型的数据.(然而我没有遇到过)

8.1.1 IO对象无拷贝或赋值

 IO对象不能拷贝或赋值,通常用引用方式传递和返回流,由于读写一个IO对象回改变其状态,因此传递和返回的引用不能是const.

8.1.2条件状态

IO类定义一些函数和标志帮助我们访问和操纵流的条件状态:

 badbit表示系统级错误,一般badbit被置位,流就无法使用.

failbit被置位表示期望读取数值却读出一个字符等错误.这种问题可以修正.

如果读取文件达到文件结束位置,eofbit和failbit都会被置位.

以上三种任何一个被置位都会导致检测流状态的条件失败.

8.1.3管理输出缓冲

每个输出流都管理一个缓冲区,用来保存程序读写的数据.缓冲区不刷新,数据就会一直停留在缓冲区.

导致缓冲区刷新的原因通常有以下几种:

程序正常结束.

缓冲区满时.

endl等操纵符显式刷新缓冲区.

一个输出流关联另一个流,当读写被关联的流时,关联的流的缓冲区会被刷新.

 刷新缓冲区的操纵符:

cout<<"hello world"<<endl;    //输出一个换行然后刷新缓冲区.
cout<<"hello world"<<flush;   //直接刷新缓冲区.
cout<<"hello world"<<ends;    //输出一个空字符然后刷新缓冲区.

使用tie可以关联两个流对象.标准库默认将cout和cin关联在一起.

cin.tie(&cout);    //将cin和cout关联在一起(标准库已经默认这么干了).
cin.tie();         //不带参数则返回指向关联的流的指针,没有关联的流则返回void

8.2文件输入输出

头文件fstream定义了三个类型来支持文件的输入输出:

ifstream:从给定文件读取数据.

ofstream:从给定文件写入数据.

fstream:既可以读取又可以写入.

//文件输出流程:
ofstream ofs;                 //创建流对象
ofs.open(文件路径,打开方式)    //给流对象绑定文件
//以上两步可以合为一步: ofstream ofs(文件路径,打开方式)
ofs<<输入的内容               //输入数据
ofs.close()                  //关闭流对象

//文件输入流程:
ifstream ifs;                 //创建流对象
ifs.open(文件路径,打开方式)    //给流对象绑定文件
ifs>>接收数据的数组            //读取数据
ifs.getline(接收数据的数组,所要读取的字符数) //读取数据
getline(ifs,接收数据的字符串)  //这里需要的是字符串,并且需要#include<string>
ifs.get()                    //读取单个char.
ifs.close()                  //关闭流对象

如果文件流对象被创建在一个作用域内(例如在循环体里),那么出了作用域则文件流对象被销毁,close()会自动被调用.

8.2.2文件模式

未指定文件打开模式时,ifstream默认以in模式打开,ofstream默认以out模式打开,fstream默认以in|out模式打开(多种模式可以用(或)|来连接表示用多种方式打开文件).

以out模式打开文件,会清空原文件内容.

8.3 string流

 头文件sstream定义三个类型来支持内存IO,可以把字符串当作一个IO流来使用.

istringstream:从stream读取数据

ostringstream:向string写入数据

stringstream:可读可写

 头文件sstream继承自iostream,所以对于iostream的操作可以用在sstream上.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值