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

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

    因能力所限,理解未必全部正确,故有不当和不对的地方欢迎指出,谢谢。
  • 相关阅读:
    在已经安装的nginx上,增加ssl模块
    apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
    ab和jmeter进行GET/POST压力测试的使用心得和比较
    linux历史命令查找快捷方式
    HDFS的dfs.replication不同验证
    Set replication in Hadoop
    RVM 安装 Ruby
    Fluentd初探 简介与安装
    Flunetd 用于统一日志记录层的开源数据收集器
    Custom partition assignment and migration kafka集群扩充迁移指定partition
  • 原文地址:https://www.cnblogs.com/longerye/p/3920553.html
Copyright © 2020-2023  润新知