IO流:
一、C++中标准IO库:
1).为面向对象的标准库。
2).以继承的形式设计。
A)以iostream为基类,派生出了fstream,strigstream类。注意:fstream、stringstream没有继承关系,open、close为fstream类自有的函数操作,str为stringstream自有的函数操作,故其各函数操作不可混用,而iostream中的函数操作其两子类由于继承关系可以调用。
B) 其禁用了复制和赋值操作,故IO对象不可以复制或赋值。这将导致像vector容器无法存储IO流对象。其函数的形参和返回值也只能是该对象的引用或指向给对象的指针。一般情况下:IO的读写会导致其状态的改变,故引用必须为非const的。
3).iostream。
IO流的读写。fstream:从文件中的读写。stringstream:从string中的读写。
4).条件状态。
实现IO的继承是发生错误的根源。IO标准库管理一系列条件状态成员,用来标记给定的IO对象是否处于可用状态,或者碰到了哪种特定的错误。其无法自动恢复,故需要程序员自己手动恢复。
类的私有变量:iostate、badbit、failbit、eofbit。相关的函数:eof()、 fail()、 bad() 、 good()、 clear()、 clear(flag)、 setstate(flag)、 rdstate().其相关的函数保证了对其发生的错误的检测和处理。
注: A) 流的输入、输出必须处于无错状态。必要时需要对其进行检测和重新设置。
5).缓冲区的管理:
每个IO对象都有相应的缓冲区,下面几种情况可以导致缓冲区的内容被刷新:
A) 程序正常结束。
B) 缓冲区满。
C) 用操作符显示刷新,endl,ends,flush。
D) 用unitbuf操作符设置流的内部状态,从而清空缓冲区。
E) 将输入流和输出流关联(tie)起来。这种情况下,在读输入流时将刷新其关联的输出缓冲区。
二、文件的输入和输出:fstream:特有函数open、close。
文件流对象的使用:
A) 定义并绑定。 string ifile; fstream infile( ifile.c_str() ).
B) 先定义后绑定。 ifstream infile; infile.open("in.txt");
注意:1.检查文件是否打开成功。 if(infile);
2.将文件流与新文件重新捆绑时,需要先close前一个,再open新对象。
3.清除文件流的状态。关闭流并不能改变流对象的内部状态,故打算重用已经存在的流对象时,需要先close和clear,以保证使用的正确。
文件的模式(是文件属性而非流的属性): in只读 out先清空再写 app追写 ate打开文件定位于文件尾 trunc打开文件清空已经存在的文件流 binary以二进制模式进行IO操作。
例如: ifstream infile( ifile.c_str(), fstream::in | fstream::out );
三、字符串流:stringstream:streng s;特有函数str(),str(s)。
1.stringstream对象的使用。
string line, word;
while( getline(cin, line))
{
istringstream stream( line );
whlie( stream >> word )
{
process();
}
}
2.stringstream提供的转换和/或格式化。
待续.....................