cpp学习

8.1 io类

  • iostream
  • fstream
  • sstream

8.1.1 IO对象无拷贝或赋值

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

8.1.2 条件状态

IO库的条件状态

条件状态 描述
strm::iostate strm 是一种IO类型。iostate是一种机器相关的类型,提供了表达条件状态的完整功能
strm::badbit strm::badbit用来指出流已崩溃
strm::failbit strm::failbit用来指出一个IO操作失效了
strm::eofbit strm::eofbit用来指出流到达了文件结束
strm::goodbit strm::goodbit用来之后粗流未处于错误状态,此值保证为0

一个流一旦发生错误,其上后续的IO操作就会失败。因此需要在使用流之前检查它是否处于良好状态,最简单的办法是将它当作条件来使用

查询流的状态

管理条件状态

8.1.3 管理输出缓冲

导致缓冲刷新的原因有很多:

  • 程序正常结束,作为main函数或者return操作的一部分,缓冲刷新被执行
  • 缓冲区满时,需要刷新缓冲
  • 可以使用endl等操作符来显式刷新缓冲区
  • 每个输出操作之后,可以用操作符unitbuf 设置流的内部状态,来清空缓冲区。默认情况下,对cerr是设置unitbuf的,因此写到cerr的内容都是立即刷新的
  • 一个输出流可能被关联到另外一个流。当读写被关联的流是,关联到的流会被刷新

刷新输出缓冲区

  • endl:输出一个换行,并刷新
  • flush:刷新缓冲区
  • ends:输出一个空字符,并刷新缓冲区

unitbuf 操纵符

  • unitbuf:所有输出操作后都会立即刷新缓冲区
  • nounitbuf 回到正常的缓冲方式

关联输入和输出流

tie():返回指向输出流的指针,如果本对象当前关联到一个输出流,那么返回这个流的指针
tie(&ostream)将本对象关联到一个ostream

8.2文件输入输出

fstream 特有的操作

特性 描述
fstream fstrm; 创建一个未绑定的文件流,fstream 是头文件中定义的一个类型
fstream fstrm(s); 创建一个fstream 打开名为s的文件。s可以是string类型的,或者是一个指向c风格字符串的指针。这些构造函数都是explicit的,默认的文件模式依赖于fstream的类型
fstream fstrm(s,mode); 以指定mode打开文件
fstrm.open(s) 打开名为s的文件,并将文件与fstrm绑定。s可以是一个string 或者一个指向c风格字符串的指针。默认的文件mode依赖于fstram的指针
fstrm.close() 关闭与fstrm绑定的文件。返回void
fstrm.is_open() 返回一个bool值,指出与fstrm关联的文件是否成功打开且尚未关闭
上一篇:element-ui upload组件后台下载


下一篇:C++ 文件IO