C++ Primer(一)_标准库_IO库
I/O库
屏蔽了具体IO对象,统一>>、<<、getline操作
头文件与类型
| 头文件 | 类型 | 类型(宽字符版) |
|---|---|---|
| iostream | istream | wistream |
| ostream | ostream | |
| iostream | iostream | |
| fstream | ifstream | wifstream |
| ofstream | wofstream | |
| fstream | wfstream | |
| sstream | istringstream | wistringstream |
| ostringstream | wostringstream | |
| stringstream | wstringstream |
流状态
strm是一种流类型
| 类型或成员函数 | 返回或说明 |
|---|---|
| strm::iostate | 及其相关类型 |
| strm::badbit | 流崩溃,系统级错误,不可恢复 |
| strm::failbit | IO失败,读取到与预料不符或eof时,可修复 |
| strm::eofbit | EOF |
| strm::goodbit | 未错误 |
| s.eof() | bool |
| s.bad() | bool |
| s.good() | bool |
| s.clear() | void,所有位复位,流有效 |
| s.clear(flags) | void,flags未上述strm::iostate的或 |
| s.setstate(flags) | void |
| s.rdstate | strm::iostate |
- 影响:流一旦错误,后续IO都会失败,bad, fail, eof都算错误
- 流作为条件使用,没错误就是true
输出缓冲管理
每个输出流都管理一个缓冲区
-
缓冲刷新条件
警告!程序崩溃,输出缓冲不会被刷新
- 程序正常结束
- 缓冲区满
- endl:添加换行再刷新;ends:添加空格再刷新;flush:仅刷新
- 设置unibuf
- 关联的流被读写
-
unibuf操作符
影响的是当前设置的流
cout << unibuf; // 之后所有输出操作都会立即刷新 cout << nounibuf; // 返回正常刷新方式 -
流关联
当一个流被其他流关联时,其他流的读写会导致它被刷新,如:cout,被cin、cerr关联
// 版本1:无参数,返回关联的流或nullptr // 版本2:os指针,传递空指针解开关联 // 只能输入关联输出,或输出关联输出 is.tie(&os); os.tie(&os2);
文件流
-
打开方式
fstrm指某种文件流类型
fstrm:: 说明 in 读 out 写 app 每次均定位到末尾 ate 打开即定位末尾 trunc 截断 binary 二进制 - 说明
- if默认in, of默认out, f默认in|out, if不能用out, of类似
- app隐式out
- out隐式trunc
- 定义时打开:
fstrm f(path); // path可以是string或c字符串,mode默认根据fstrm类型获得 fstrm f(path, mod); //- open打开:
// 支持打开新文件 f.open(path); // mode根据f类型获得 f.open(path, mode); // - 说明
-
其他操作
f.close(); // 流被析构时也会关闭 f.is_open();
string流
-
输入流
-
打开方式——都是拷贝
sstrm s; // 未绑定 sstrm s(str); // 拷贝str s.str(); // 返回完整str的拷贝,即使s被读取过 s.str(str); // 拷贝str
-
-
输出流
相当于一个string的缓冲区,使用<<写入
ostringstram os; os << str; cout << os.str(); // .str()返回内容, 不会清楚原来的内容

浙公网安备 33010602011771号