首页 > 代码库 > 浅谈C++ IO标准库(1)

浅谈C++ IO标准库(1)

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提供的转换和/或格式化。

待续.....................