The IO Library

从流中读取和写入的IO操作

IO类

  • iostream: 读写流的基本操作的头文件
    • isteam, wistream: 从流中读取
    • ostream, wostream: 向流中写入
    • iostream, wiostream: 读写流
  • fstream: 读写命名文件的类型的头文件
    • ifstream, wifstream: 从文件中读取数据
    • ofstream, wofstream: 向文件中写入数据
    • fstream, wfstream: 读写文件
  • sstream: 读写内存string对象的类型头文件
    • istringstream, wistringstream: 从string读取数据
    • ostringstream, wostringstream: 向string写入数据
    • stringstream, wstringstream: 读写string

不能拷贝或者对IO对象赋值,IO操作的函数通常以引用的方式传递和返回流。读写IO对象会改变其状态,因此引用不能是const的

  • strm::iostate: 表达条件状态的完整功能
  • strm::badbit: 流已崩溃
  • strm::failbit: IO操作失败
  • strm::eofbit: 流达到了文件末尾
  • strm::gootbit: 用来指出流未出错,此值保证为0
  • s.eof()/fail()/bad()/good(): Bool
  • s.clear(): 条件状态复位
  • s.clear(flags) flags: strm::iostate: 将对应状态复位
  • s.setstate(flags): 将流中对应的状态位,置位
  • s.rdstate(): 返回流s的当前条件状态

缓冲区刷新

  1. 程序正常结束
  2. 缓冲区满
  3. 使用endl操作符
  4. unitbuf -> cerr设置unitbuf -> cerr刷新缓冲区。cout << unitbuf;
  5. 流关联。读cin和写cerr刷新 -> 关联到cout的缓冲区刷新

文件的输入输出

ifsream, ofstream, fstream

  • fstream fstrm; 未绑定的文件流
  • fstream fstrm(s); 打开名为s的文件,s可以是string类型,或者是一个指向C风格字符串的指针
  • fstream fstrn(s, mode): 按照指定mode打开文件
  • fstrm.open(s), fstrm.close(), fstrm.is_open()

fstream作为子类,可以替代iostream&。如果定义了一个空文件流obj,可以随后调用open将其与文件关联起来。

文件模式

  • in: 只读
  • out: 写
  • app: 每次写操作前均定位到文件末尾,只要trunc没被设定
  • ate: 代开文件后立即定位到文件末尾
  • trunc: 截断文件,只有当out被设定时才能设定
  • binary: 以二进制方式进行IO

string流

istringstream, ostringstream, stringstream

  • sstream strm;
  • sstream strm(s); 保存string s 的一个拷贝
  • strm.str() 返回strm所保存的string的拷贝
  • strn.str(s) 将string s拷贝到strm中,返回void