C++ primer 学习笔记(六)

charpter8 IO库

IO类

  • 基本io类:istream,ostream,cin(iosteam的一个对象),cout(ostream的一个对象)
  • 基本io类2:iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。

    iosream: 从流中读写
    fstream:从文件中读写
    sstream:从string中读写

  • 刷新输出缓冲区:endl->输出换行并刷新缓冲区 // flush->刷新 // ends-> 输出空字符并刷新缓冲区

  • 若每次输出操作后都刷新缓冲区,使用unitbuf,接下来的操作都进行一次flush操作。nounitbuf则回到正常的缓冲方式。

    cout<<unitbuf //之后的输出均刷新
    cout<<nounitbuf //回到正常缓冲方式

文件的输入输出

  • 头文件fstream支持文件IO:ifstream 从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件。

    基本操作
    fstream my_file; //创建一个未绑定的文件流
    my_file.open(s); //打开名为s的文件:s可以为string或字符串的指针
    my_file.close()
    my_file.is_open() //bool值,指出与my_file关联的文件是否打开
    创建文件流方式:1)未绑定 2)绑定对象并打开fstream my_file(s) 3)绑定并以指定模式打开 fstream my_file(s,mode|mode)

    打开模式mode
    ios::in 为输入(读)而打开文件
    ios::out 为输出(写)而打开文件
    ios::ate 初始位置:文件尾
    ios::app 所有输出附加在文件末尾
    ios::trunc 如果文件已存在则先删除该文件
    ios::binary 二进制方式

  • ofstream 写文件 ifstream 读文件, 若写文件时文件不存在则新建
  • 文件读写操作与cin,cout从控制台读写类似 举例:

    ofstream out(); 写文件
    out<<”…..”<>s
    char buff[255]; in.getline(buff,100);

    Tip: getline 用法(1)若是读进数组,则采用上述方式(2)若读入string data,则直接getline(in,data);

    写文件时,只有当模式为app时,才不会清除原文件。

string流的输入输出

  • sstream 的类型有istringstream、ostringstream、stringstream,分别为读、写、读写
  • sstream strm; //sstream strm(s) 保存string s 的一个拷贝
  • strm.str();//返回strm中的值
  • strm.str(s);// 将s拷贝到strm
  • 注意 strm.str(s)只能赋值一次,若想再赋值,需要strm.clear();

流的条件状态标志

  • 假设s为某个流。如 iostream s // fstream s //sstream s

    s.eof() 若到达流末尾则返回true
    s.fail() 若流崩溃则返回true :读写过程中出问题,或写入设备无空间,或格式错误
    s.bad() 若流崩溃则返回true :读写过程中出问题,或写入设备无空间
    s.good() 流正常状态为true
    一般使用 s>>a为判断条件,其实使用的是s.good()

http://blog.csdn.net/kingstar158/article/details/6859379