第八章-IO库

IO库


1 IO类

  • 为了支持使用宽字符的语言,标准库定义了一组类型和对象来操纵wchar_t类型的数据。宽字符版本的类型和函数的名字以一个w开始。

1-1 IO对象无拷贝或赋值

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

1-2 条件状态

  • 一个流一旦发生错误,其上后续的IO操作都会失败。只有当一个流处于无错状态时,才可以从它读取数据,向它写入数据。
  • strm::badbit表示系统级错误。通常一旦strm::batbit被置位,流就无法再使用了。
  • 在发生可恢复错误后,strm::failbit被置位。这种问题可以被修正,流还可以继续使用。
  • 如果到达文件结束位置,strm::eofbit和strm::failbit都会被置位。
  • strm::goodbit的值为0,表示流未发生错误。strm::badbit、strm::failbit、strm::eofbit任一个被置位,检测流状态的条件都会失败。

1-3 管理输出缓冲

  • 导致缓冲刷新(数据真正写到输出设备或文件)的原因有很多:
  • 程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行;
  • 缓冲区满时,需要刷新缓冲区,而后新的数据才能继续写入缓冲区;
  • 使用了操作符如endl(或flush:刷新缓冲区但是不输出任何额外字符,或ends:向缓冲区插入一个空字符然后刷新缓冲区)显式刷新缓冲区;
  • 在每个输出操作之后,可以用操作符unitbuf设置流的内部状态,它告诉流在接下来的操作之后都进行一次flush操作(恢复内部状态用nounitbuf);
  • 一个输出流可能被关联到另外一个流。这种情况下,当读写被关联的流时,关联到的流的缓冲区就会被刷新。
  • 交互式系统通常应该关联输入流和输出流。意味着所有输出,包括用户提示信息,都会在读操作之前被打印出来。
  • 关联两个流需要tie函数。tie有两个重载的版本:
  • tie():返回一个指向输出流的指针。如果本对象关联到一个输出流,返回的就是关联到的输出流的指针;如果未关联到流,则返回空指针。
  • tie(ostream*):将本对象关联到一个ostream对象上。如果参数是nullptr,则该对象不再与任何流关联,并且返回之前关联的输出流指针或者nullptr。


2 文件输入输出

  • C++11新标准中,文件流关联的文件名既可以是string对象,也可以是C风格字符数组。而旧标准只能是后者。
  • 接受一个iostream类型引用(或指针)参数的函数,可以用一个对应的fstream(或sstream)类型来调用。
  • 如果fstream.open(s)失败,failbit会被置位。
  • 对一个已打开的文件流调用open会失败,并导致failbit被置位。
  • 当一个fsteam对象被销毁时,close会自动调用。
  • 文件模式有以下这些:
  • in:以读方式打开
  • out:以写方式打开
  • app:每次写操作前均定位到文件末尾
  • ate:打开文件后立即定位到文件末尾
  • trunc:截断文件
  • binary:以二进制方式进行IO


3 string流

  • sstream头文件中定义了三个类型来支持内存IO:istringstream,ostringstream,stringstream。

你可能感兴趣的:(C++Primer无聊笔记)