程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以保存数据,实现数据的持久化。
1.IO流
- istream 是用于输入的流类,cin 就是该类的对象。
- ostream 是用于输出的流类,cout 就是该类的对象。
- ifstream 是用于从文件读取数据的类。
- ofstream 是用于向文件写入数据的类。
- iostream 是既能用于输入,又能用于输出的类。
- fstream 是既能从文件读取数据,又能向文件写入数据的类。
- istrstream 输入字符串类
- ostrstream 输出字符串类
- strstream 输入输出字符串流类
(1)标准输入/输出流
C++的输入/输出流库(iostream)中定义了4个标准流对象:cin(标准输入流-键盘),cout(标准输出流-屏幕),cerr(标准错误流-屏幕),clog(标准错误流-屏幕)
- cerr 不使用缓冲区,直接向显示器输出信息;而输出到 clog 中的信息会先被存放到缓冲区,缓冲区满或者刷新时才输出到屏幕。
- cout 是 ostream 类的对象,ostream 类的无参构造函数和复制构造函数都是私有的,所以无法定义 ostream 类的对象。
- 使用>>提取数据时,系统会跳过空格,制表符,换行符等空白字符。所以一组变量输入值时,可用这些隔开。
- 输入字符串,也是跳过空白字符,会在串尾加上字符串结束标志\0。
(2)输入流中的成员函数
- get函数:cin.get(),cin.get(ch)(成功返回非0值,否则返回0),cin.get(字符数组(或字符指针),字符个数n,终止字符)
- getline函数:cin.getline(字符数组(或字符指针),字符个数n,终止标志字符),读取字符知道终止字符或者读取n-1个字符,赋值给指定字符数组(或字符指针)
- cin.peek() 不会跳过输入流中的空格、回车符。在输入流已经结束的情况下,cin.peek() 返回 EOF。
- ignore(int n =1, int delim = EOF)
- putback(char c),可以将一个字符插入输入流的最前面。
(3)输出流对象
- 插入endl-输出所有数据,插入换行符,清空缓冲区
- \n-输出换行,不清空缓冲区
- cout.put(参数) 输出单个字符(可以时字符也可以是ASCII码)
2.文件操作
C++ 标准类库中有三个类可以用于文件操作,它们统称为文件流类。这三个类是:
- ifstream:输入流类,用于从文件中读取数据。
- ofstream:输出流类,用于向文件中写人数据。
- fstream:输入/输出流类,既可用于从文件中读取数据,又可用于 向文件中写人数据。
(1)打开文件
模式标记 |
适用对象 |
作用 |
ios::in |
ifstream fstream |
打开文件用于读取数据。如果文件不存在,则打开出错。 |
ios::out |
ofstream fstream |
打开文件用于写入数据。如果文件不存在,则新建该文件;如 果文件原来就存在,则打开时清除原来的内容。 |
ios::app |
ofstream fstream |
打开文件,用于在其尾部添加数据。如果文件不存在,则新建该文件。 |
ios::ate |
ifstream |
打开一个已有的文件,并将文件读指针指向文件末尾(读写指 的概念后面解释)。如果文件不存在,则打开出错。 |
ios:: trunc |
ofstream |
单独使用时与 ios:: out 相同。 |
ios::binary |
ifstream ofstream fstream |
以二进制方式打开文件。若不指定此模式,则以文本模式打开。 |
(2)移动和获取文件读写指针
- ifstream 类和 fstream 类有 seekg 成员函数,可以设置文件读指针的位置;
- ofstream 类和 fstream 类有 seekp 成员函数,可以设置文件写指针的位置。
- ifstream 类和 fstream 类还有 tellg 成员函数,能够返回文件读指针的位置;
- ofstream 类和 fstream 类还有 tellp 成员函数,能够返回文件写指针的位置。