第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流,再读取各个成员/字段


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部