C++ Primer读书笔记--第八章

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");

文件模式

Leave a Reply

Your email address will not be published. Required fields are marked *