- C++的 I/O是以一连串的字节流的方式进行的,在输入操作中,字节从设备(键盘,磁盘驱动器等)流向内存。在输出操作中,字节从内存流向设备(显示屏,打印机等)
- C++将每个文件看成是字节序列流。
一、关于流的头文件
绝大多数的C++程序都包含了< iostream >
头文件,该头文件中声明了所有I/O流操作的所需的基础服务。< iostream >
头文件定义了 cin 标准输入流、cout 标准输出流、cerr 标准错误流 和 clog 有缓冲的标准错误流(流输出内容存入缓冲区,直到缓冲区填满或是被清空才会输出)< iomanip >
头文件声明了对于带有参数化流运算符(例如 setw 和 setprecision)的格式化I/O有用的服务<fstream>
头文件声明了用户控制的文件处理服务
二、文件打开模式
三、输出流
输出功能包括
- 流插入运算符 <<
- put成员函数进行字符输出
- write成员函数进行非格式化的输出
- 十进制、八进制、十六进制格式的整数输出
- 不同精确度的浮点数的输出
- 指定宽度数据的输出
- 。。。。。。
1. 构造输出流对象打开文件——用于修改
默认输出流文件打开模式是 ios::out
当不需要文件时显示的将其关闭,可以减少资源占用 file.close();
举例:使用I/O流以文本方式建立一个文件test.txt,并写入字符!
1 | ofstream file1("E:\\Codes\\TestInfo\\test.txt"); |
2. 文件输出流成员函数
put 成员函数
cout.put('A');
显示单个字符。
put也可级联使用cout.put('A').put('\n');
cout.put(‘A’); 效果基本等同于 cout<<’A’;
cout.put(‘AAAA’); //错误,只能输出单个字符warning: overflow in implicit constant conversion [-Woverflow]
write 成员函数
将内存中的一块内容写到一个文件输出流中
从字符数组中输出字节到文件中去
四、输入流
1. 构造输入流对象打开文件——用于读取
文件输入流的默认打开模式 ios::in
2. 输入流相关函数
get成员函数
功能和 >> 很像,主要的不同点在于 get函数在读入数据时包括空白字符
get函数在遇到文件尾的时候返回 EOF
getline 成员/非成员函数
读取多行字符,每读一行存储一次,可定义行分割符
- 非成员函数
函数原型template<> std::istream &std::getline<...>(std::istream &__is, std::string &__str, char __delim)
第一个参数传入输入流,第二个参数传入string字符串,第三个参数为自定义行分割符,getline读取到行分割符就结束本次读取,并将自定义的行分割符从流中删除
举例:分行读取文件中的内容
文件中的内容
123
456
789
1 |
|
读取结果
123
4
6
- 成员函数
成员函数只能将读取到内容存储在字符数组中 char[ ]
函数原型 template<> std::istream &std::istream::getline(char *__s, std::streamsize __n, char __delim)
第一个参数时字符数组,第二个参数是读取的字节数,第三个参数为自定义行分割符
读取的字节数已满或者已到自定义的行分割符,则getline都会结束本次读取,并将自定义的行分割符从流中删除
1 | int main(){ |
输出结果
1
3
456
read 成员函数
从文件中读取内容输入到字符数组中
由长度参数确定要读的字节数