iostream
条件状态
strm::iostate
是机器相关的位类型,用来标识流错误状态,有4个值,strm::badbit
,strm::failbit
,strm::eofbit
和strm::goodbit
。可用ios::bad()
,ios::fail()
,ios::eof()
和ios::good()
来得知各个flag是否置位;用ios::rdstate()
来获取流的当前状态。
|
|
不同的错误会导致不同的flag被置位,
- eof -> eofbit,failbit
- fail -> failbit
- bad -> badbit,且fail()返回true
用ios::clear()
和ios::setstate()
可以对flag进行置位,两者区别在于,ios::clear()
会先将原先的所有flag先复位,而后者不会,
|
|
输出缓冲
每个输出流都管理一个缓冲区。
缓冲刷新
即数据真正写到输出设备或文件,会有以下原因,
- 程序正常结束,main函数return;
- 缓冲区满,需要刷新才能写入后续数据;
- 使用操纵符;
endl
:换行并刷新缓冲区;flush
:刷新缓冲区,不附加任何额外字符;ends
:附加一个空字符,刷新缓冲区。
unitbuf
和nounitbuf
; 使用unitbuf
后,接下来的每次写操作都进行一次flush;使用nounitbuf
返回正常的缓冲方式。- 关联输入流和输出流。
关联一个输入流到输出流时,从输入流读取数据,会先刷新关联的输出流,
cin
和cout
是被关联的。使用tie
进行关联。
|
|
fstream
|
|
继承自iostream
,
- 接受一个
iostream
类型引用或指针参数的函数,可用一个对应的fstream
类型来调用; - 支持
iostream
的所有操作。
fstream
也有自己特有的行为和操作,
fstream::fstream(s)
:创建对象并打开文件s
;fstream::open()
:打开文件,并与fstream
对象关联;fstream::close()
:关闭与fstream
对象关联的文件;fstream::is_open()
:与fstream
对象关联的文件是否成功打开,且未关闭;- 对于已打开的
fstream
对象,再次open()
会失败; open()
失败->failbit;1 2 3 4
ifstream ifs(...); if (ifs) { ... }
- 当
fstream
对象被销毁,close()
会被自动调用。
文件模式
对于ofstream
,
- 未指定打开模式时,以
out
打开; - 通常
out
意味着同时使用trunc
; app
不能与trunc
同时设置;app
和ate
;app
,所有的输出操作都在文件末尾,不能seek around;ate
,初始位置在文件末尾,可以seed around。
sstream
|
|
类似fstream
,sstream
也包含特有的操作,
sstream::sstream(s)
:创建对象,并保存s
的copy;sstream::str()
:返回保存的string的copy;sstream::str(s)
:copys
到对象中。