C++IO流

文章目录

  • 一、C++IO流体系
  • 二、C++标准IO流
  • 三、C++文件IO流
    • 1.ifstream
    • 2.ofstream

一、C++IO流体系

C++流是指信息从外部输入设备向计算机内部输入,从内存向外部输出设备输出的过程,这种输入输出的过程非常形象地被称为流的概念。IO流指的就是输入输出流。

我们平时对终端控制台的输入输出操作,对文件的输入输出操作以及对字符串的流操作,都属于C++的IO流体系。

C++系统实现了一个庞大的IO流体系,其中ios为父类,其它类都是直接或者间接继承自ios类。其中包括istream文件下的终端IO流、fstream文件下的文件IO流和sstream文件下的字符串IO流。

C++IO流_第1张图片

二、C++标准IO流

C++标准IO流即istream文件下的终端IO流,C++标准库提供了4个全局流对象:cin、cout、cerr、clog。

  • cin:用来进行标准输入,即数据通过键盘输入到程序中。
  • cout:用来进行标准输出,即数据从内存流向控制台。
  • cerr:用来进行标准错误的输出。
  • clog:用来进行日志的输出。

如果输入的数据类型不是字符型或者字符串型时,用cin输入的话,空格和回车都可以作为数据之间的分隔符,多个数据可以在一行输入,也可以分行输入。

但是如果输入的数据类型时字符型和字符串型时,用cin输入的话,空格和回车符是无法读取的。

三、C++文件IO流

1.ifstream

ifstream对应的是文件的读取操作,我们可以构建ifstream对象来进行文件读取操作,它的构造函数有两个:

一个是无参构造函数,无参构造函数的话需要我们手动调用ifstream类里的open函数来打开一个指定的文件。

还有一个是有参构造函数,需要传递打开文件的文件名(带路径的文件名),以及打开的选项。

在这里插入图片描述

打开的选项有inoutbinaryateapptrunc

  • in:对应文件读取操作,以读取文件的形式打开文件。
  • out:对应文件写入操作,以写入文件的形式打开文件。
  • binary:以二进制形式打开文件。
  • ate:对应文件写入操作,打开文件时文件指针指向文件的末尾。
  • app:对应文件写入操作,在文件末尾追加写入内容。
  • trunc:文件打开以后,文件原来有的内容将被清空。

下面我们演示一下ifstream对象的几种读取文件的方式:

operator>>:
由于ifstream也是继承自ios类的,它也支持流提取方式读取文件内容,这种方式不支持读取空格和换行符:

#include 
#include 

using namespace std;

int main()
{
    ifstream ifs("Test.cc", ios::in);
    char ch;
    while(ifs >> ch)
    {
        cout << ch;
    }
    return 0;
}

get函数:
ifstream对象可以istream类里的get函数来实现对文件内容的读取,get函数是按字节读取,一次读取一个字符,空格和换行符它都能读取到:

#include 
#include 

using namespace std;

int main()
{
    ifstream ifs("Test.cc", ios::in);
    char ch;
    while(ifs)
    {
        ch = ifs.get();
        cout << ch;
    }
    return 0;
}

2.ofstream

ofstream对应的是文件的写入操作,我们可以构建ofstream对象来进行文件的写入操作,它的构造函数和ifstream基本类似。

在这里插入图片描述

我们演示一下ofstream的写入操作:将上面ifstream的读取操作结合起来,用ifstream读取文件内容,再用ofstream写入到一个新的文件中:

#include 
#include 
#include 

using namespace std;

int main()
{
    ifstream ifs("Test.cc", ios::in);
    ofstream ofs("copy.cc", ios::out);
    char ch;
    while(ifs >> ch)
    {
        ofs << ch;
    }
    return 0;
}

你可能感兴趣的:(C++,c++,objective-c,开发语言,数据结构,算法)