第8章 IO类

8.1 标准库定义的IO类型
  • iostream 定义了用于读写流的基本类型

  • fstream 定义了读写命名文件的类型

  • sstream 定义了读写内存string对象的类型

  • 对于宽字符,类型和函数的名字都以 w 开头,wcin/wcout/wifstream/wofstream

  • IO对象拷贝和赋值

    ofstream out1,out2;
    out1=out2;			//错误,不能对流对象赋值
    ofstream print(ofstream)	//错误,不能初始化ofstream参数
    out2=print(out2);	//错误不能拷贝流对象
    
  • 由于不能拷贝IO对象,因此不能将形参和返回值类型设为流类型,进行IO操作的函数通常以引用方式传递和返回流 ,读写一个流会改变其状态,所以不能使用const

8.2 条件状态
  • 一个流一旦发生错误,其上后续IO操作都会失败,故通常在使用一个流之前要检查其状态
  • badbit 系统级错误,无法再使用(badbit置位,failbit也置位)
  • failbit 可恢复错误,可以修正,流可以继续使用
  • eofbit 文件末尾,failbit也要置位
  • goodbit 流未发生错误
  • 返回流当前状态s.rdstate
8.3 管理输出缓冲
  • 导致缓冲刷新的原因

    • 程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行
    • 缓冲区满时
    • 使用操纵符endl显式刷新
    • 在每个输出操作后,用操纵符unitbuf设置流的内部状态
    • 一个输出流可能被关联到另一个流
  • 操纵符显式刷新

    cout<<"hi"<<endl;		//输出hi,换行,刷新
    cout<<"hi"<<flush;		//输出,刷新,不附加字符
    cout<<"hi"<<ends;		//输出,附加一个空字符,刷新
    
  • unitbuf 操纵符

    cout<<unitbuf;		//所有输出操作都会立刻刷新缓冲区
    cout<<nounitbuf;	//回到正常的刷新缓冲方式
    
  • 程序崩溃,缓冲区将不会被刷新

8.4 关联输入输出流
  • tie

    • 不带参数,返回指向输出流的指针
    • 带一个ostream指针,将对象关联到该ostream
    cin.tie(&cout);		//cin和cout关联
    ostream *old_tie=cin.tie(nullptr);	//cin不再与其他流关联
    
8.5 文件流
  • 文件输入输出流

    • ifstream 从给定文件读取数据
    • ofstream 向给定文件写如数据
  • 使用文件流

    ifstream in(filename);		//构造一个文件流对象并打开给定文件
    
  • 文件模式

    • app 写操作,定位到文件末尾,追加内容
    • ate 打开文件后定位到文件末尾
    • out 以写方式打开,已有数据会被覆盖
8.6 string流
  • istringstream 从string 读取数据
  • 用法:读取文件内容时,先读取一行,构造string流,再读取各个成员/字段
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值