C++primer第4版第八章标准IO库

原创 2016年12月05日 14:28:05

Talk is cheap, show me the code.

  1. 流不能复制。

    ofstream o1, o2;
    o1 = o2; //wrong

  2. 流不能直接作为函数形参或者返回值,但可以使用流的引用或者指针:

    ofstream & fun1(ofstream &); //right
    ofstream * fun2(ofstream *); //right
    ofstream fun3(ofstream); //wrong

  3. 流有四种状态,bad,fail,eof和good,只有good状态才是有效状态,这四个状态分别由badbit,failbit,eofbit和goodbit控制,可以通过setstate来控制。

    ifstream ifs1;
    ifs1.setstate(badbit | failbit); //同时将badbit和failbit置为1

  4. 输出流缓存区的刷新,可以通过显示输出flush,endl,ends或者unitbuf来刷新缓存区,其中flush不输出任何字符,直接刷新缓存区,endl输出换行符然后刷新缓存区,ends输出NULL字符然后刷新缓存区,unitbuf相当于每次写入操作后都会进行flush,可以通过nounitbuf来回复系统管理缓存区的模式。 另外,标准库将cin和cout绑定在了一起,即每次cin读入一次都会自动刷新cout的缓存区进行一次输出。

    cout << "hello" << flush;
    cout << "hello" << endl;
    cout << "hello" << ends;
    cout << unitbuf << "hello" << nounitbuf;

  5. 如果程序需要利用一个流对象读取多个文件,那么每次处理完一个文件必须关闭流close()和清除流状态clear():

    vector<string> vect = {"file1", "file2"};
    vector<string>::iterator it = vect.begin();
    ifstream input;
    string s;
    while (it != vect.end())
    {
    input.open(it->c_str());
    if (!input)
    break;
    while(input >> s)
    process(s);
    input.close();
    input.clear();
    it++;
    }

  6. 文件打开模式,默认是ofstream::out, ifstream::in, ofstream::app:

    in 打开文件做读操作
    out 打开文件做写操作,直接覆盖原有内容
    app 在每次写之前找到文件尾,在原文件内容后追加内容,而不是覆盖原有内容
    ate 打开文件后立即将文件定位在文件尾
    trunc 打开文件时清空已存在的文件流
    binary 以二进制模式进行IO操作

    ifstream input("test.txt", ifstream::in); //不加后面的in模式,默认也是in模式
    ofstream output("test1.txt", ofstream::app); //想要在文件后追加内容,必须指定模式为app,否则默认是out模式

  7. 打开文件输入流和打开文件输出流分别有两种方式,一种是直接定义流时调用构造函数,另一种是先定义流后调用open函数打开对应文件。

    ifstream input1("test.txt"); //输入流方式一
    ifstream input2;
    input2.open("test.txt"); //输入流方式二
    ofstream output1("test1.txt"); //输出流方式一
    ofstream output2;
    output2.open("test1.txt"); //输出流方式二

  8. 包含头文件sstream,即可使用stringstream, istringstream, ostringstream流对象,但个人觉得这个字符串流没有多大优势,也可以很轻易被其他方式取代。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

大话设计模式-----策略模式

1 什么是策略模式如果你设计的类中,有经常要改变的代码,(比如说算法),那么就要把它们提取出来,如果不这样做,你就需要用大量的is-else来判断究竟需要用哪些算法。 2 开始策略模式把一个类中...
  • gusgao
  • gusgao
  • 2016年08月10日 14:40
  • 216

大话设计模式 第一章 简单工厂模式 C++实现

将功能相似的类统一继承于一个抽象基类(Abstract Base Class),将这些子类的实例化交给一个工厂类来完成。应用多态和封装的思想,子类的代码对客户端不开放。使用基类指针或引用调用virtu...

【重学《C++Primer第四版》】第八章、标准IO库

本章主要讲解了IO标准库的基础知识。 下面是本章的内容图:简单的iostream继承层次 Details of knowledge 1.基类:C++中的父类就是基类 2.派生类:C++中继...

C++ Primer 【第四版】第八章 标准IO库

第八章 标准IO库  8.1 假设os是一个ofstream对象,下面程序做了什么?        os         如果os 是ostringstream对象呢? ...

【C++ Primer】【学习笔记】【第八章】标准IO库之:文件的输入和输出

一、文件流对象的使用 1、fstream头文件定义了三种文件IO的类型: 类型 说明 ifstream 从istream派生而来,提供...
  • jay_yin
  • jay_yin
  • 2015年01月19日 23:51
  • 256

C++ Primer 4 第八章 标准 IO 库

第八章 标准 IO 库 1. 面向对象的标准库 IO 类型在三个独立的头文件中定义:iostream 定义读写控制窗口的类型,fstream 定义读写已命名文件的类型,而 sstream 所定义的...

(笔记)C++ Primer/第八章 标准IO库

IO:就是输入和输出 读和写 IO对象不可进行复制和赋值 例如:ofstream out1,out2;          out1=out2//error,io对象不能复制和赋值 如果一个函数需传递或...

C++ Primer 第八章 标准IO库

什么是缓冲区     缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。         缓冲...

C++ Primer 第八章 标准IO库

转载自:http://www.cnblogs.com/kingcat/archive/2012/05/09/2491847.html 学习本章内容之前有必要对缓冲区的概念做一个基本了解,我引...

【C++ Primer】【学习笔记】【第八章】标准IO库之:字符串流

一、stringstream对象的使用 1、sstream头文件定义了三种类型的字符串流: 类型 说明 istringstream 从...
  • jay_yin
  • jay_yin
  • 2015年02月03日 11:43
  • 283
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++primer第4版第八章标准IO库
举报原因:
原因补充:

(最多只允许输入30个字)