8.1
IO类型分在3个文件中定义:
iostream 定义了读写Console的类型;
fstream 定义了读写文件的类型;
sstream 定义了读写存储在内存中的string对象
IO类型的继承结构良好,如果参数有基类型的引用形参,可以给这个参数传递其派生的子类。
IO类型支持了国际字符,如果需要使用,只需要加入 “w”的前缀即可。
例如:wostream,wofstream等,
对应的字符类型为wchar_t
IO对象不可复制,所以传递参数或者返回的时候,需要使用引用或者指针。
8.2
IO标准库管理了一系列的状态用于标记给定IO库是否处于可用状态。
::badbit 标志系统故障,一般不可修复
::failbit 一般错误,可以修正
::eofbit 指出文件已经到达结尾,标记eofbit同时也标记了failbit
为了方便这三个状态的使用,给IO类型定义了如下的方法用于标志流状态:
::eof() 由eofbit决定
::fail() 由failbit决定
::bad() 由badbit决定
::good() 仅当badbit,failbit,eofbit都为false时,good()才返回true
::clear() 重置,设置所有流状态为有效
::clear(flag) 将某个设置为有效
::setstate(flag) 直接设定状态(为true)
::rdstate 返回流当前的状态
8.3
IO缓冲刷新办法,有2个:
(1)cout<<"Hi"<<flush; 刷新流,但不在输出中添加字符
(2)cout<<"Hi"<<ends; 刷新,并在缓冲区中插入null
tie可以捆绑输入和输出用istream或ostream对象调用。
cin.tie(&cout); //把cin捆绑在cout上
cin.tie*(0); //解除绑定
8.4
fstream包含:ifstream(读文件),ofstream(写文件),fstream(同时读写)。
读文件:
ifstream infile(ifile.c_str());
或者
ifstream infile;
infile.open("filename");
//检查文件是否打开成功
if(infile)
{
//Success
}
类似的写文件:
ofstream outfile(ofile.c_str());
outfile.open("filename");
重用流打开不同文件操作
ifstream infile("in");
.....操作infile
incile.clear(); //这一步很重要,因为前面对infile的操作可能产生了一些标志,使得good()->false导致无法继续进行操作,所以clear之后,就和新的流一样了。
infile.close();
infile.open("next");
文件模式