文章目录
- 一、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流
C++标准IO流即istream文件下的终端IO流,C++标准库提供了4个全局流对象:cin、cout、cerr、clog。
- cin:用来进行标准输入,即数据通过键盘输入到程序中。
- cout:用来进行标准输出,即数据从内存流向控制台。
- cerr:用来进行标准错误的输出。
- clog:用来进行日志的输出。
如果输入的数据类型不是字符型或者字符串型时,用cin输入的话,空格和回车都可以作为数据之间的分隔符,多个数据可以在一行输入,也可以分行输入。
但是如果输入的数据类型时字符型和字符串型时,用cin输入的话,空格和回车符是无法读取的。
三、C++文件IO流
1.ifstream
ifstream对应的是文件的读取操作,我们可以构建ifstream对象来进行文件读取操作,它的构造函数有两个:
一个是无参构造函数,无参构造函数的话需要我们手动调用ifstream类里的open函数来打开一个指定的文件。
还有一个是有参构造函数,需要传递打开文件的文件名(带路径的文件名),以及打开的选项。
打开的选项有in
、out
、binary
、ate
、app
、trunc
- in:对应文件读取操作,以读取文件的形式打开文件。
- out:对应文件写入操作,以写入文件的形式打开文件。
- binary:以二进制形式打开文件。
- ate:对应文件写入操作,打开文件时文件指针指向文件的末尾。
- app:对应文件写入操作,在文件末尾追加写入内容。
- trunc:文件打开以后,文件原来有的内容将被清空。
下面我们演示一下ifstream对象的几种读取文件的方式:
operator>>:
由于ifstream也是继承自ios类的,它也支持流提取方式读取文件内容,这种方式不支持读取空格和换行符:
#include <iostream>
#include <fstream>
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 <iostream>
#include <fstream>
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 <iostream>
#include <string>
#include <fstream>
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;
}