IO库知识点总结
IO类分别定义在三个头文件中,分别是:
1、iostream :定义基于读写流的基本类型
2、fstream :定义读写文件的类型
3、sstream :定义了内存string对象的类型
读写一个io对象会改变其状态,因此传递和返回的引用不能是const
条件状态函数:
badbit: | 表示流已经崩溃; |
---|---|
eofbit: | 表示流已经到达文件结束位置; |
failbit: | 表示IO操作失败; |
goodbit: | 表示流未处于错误状态,此值保证为0; |
s.eof(): | 如果s的eofbit置位,则返回true; |
s.fail(): | 如果s的流failbit或者badbit置位则返回true; |
s.bad(): | 如果s的badbit置位,则返回true; |
s.good(): | 如果s处于有效状态,则返回true; |
s.clear(): | 将s的所有状态位复位,流的状态设置为有效。返回void; |
s.clear(flags): | 根据给定的flags(strm::iostate)标志位,将对应条件的状态标志位复位; |
s.setstate(flags): | 根据给定的flags标志位,将s中对应状态位置位。 |
s.rdstate(): | 返回流s的当前条件状态,返回值类型为strm::iostate。 |
badbit表示系统级错误,如不可恢复的读写错误,一旦badbit被置位,流就没办法用了
文件结束后,eofbit和failbit都会被置位,如果badbit、failbit和eofbit任一个被置位,则检测流状态的条件会失败
管理缓冲:
endl:表示换行,然后刷新缓冲区
flush:表示刷新缓冲区,不附加任何字符
ends:表示输出一个空字符,然后刷新缓冲区
unitbuf:表示每次输出操作都刷新缓冲区
nounitbuf:表示回到正常的缓冲方式
程序崩溃,输出缓冲区不会被刷新
文件输入输出:
fstream fstrm;//创建一个未绑定的流
fstream fstrm(s);//创建一个fstrm,并打开s的文件
fstream fstrm(s,mode)//打开s文件,指定mode打开文件方式
fstrm.open(s);//打开s文件,并和fstrm绑定。默认mode取决于fstrm的类型,并返回一个void。
fstrm.close();//关闭与strm绑定的文件,返回void。
fstrm.is_open();//返回一个bool值,判断文件是否打开且尚未关闭。
文件模式:
in | 以读模式 打开 |
---|---|
out | 以写模式打开 |
app | 每次写之前均定位到文件结尾 |
ate | 打开文件后立即定位到文件末尾 |
trunc | 截断文件 |
binary | 以一个二进制方式进行IO |
只可以对ofstream或者fstream使用out
只可以对ifstream或者fstream使用in
只有当out被设定时,才可以设定trunc
只有未设定trunc,就可以设定app
默认情形,即使未设定trunc,以out模式打开文件也会被截断,因此保留out模式打开的内容,需要同时指定app模式或者in模式
ate和binary适用任何类型的文件流对象
string流:
sstream strm; | strm是一个未绑定的stringstream对象 |
---|---|
sstream strm(s); | strm是一个sstream对象,保存了string s的一个拷贝 |
strm.str(); | 返回strm的string拷贝 |
strm.str(s); | 将string s拷贝到strm中,返回void |