文件 IO 流 , 主要定义在 fstream.h 头文件中 , 该头文件中定义了以下三个类 :
文件 输入 / 输出流 相关的继承结构如下图所示 :
标准的 输入输出流 操作的是 显示器 和 键盘 这两个标准默认设备 , C++ 中预先定义了 cin 输入流对象 接收 键盘输入数据 , cout 输出流对象 向显示器输出数据 ;
文件输入输出流 没有默认文件设置 , 需要先创建 输出输出流对象 , 然后才能操作文件 ;
文件打开 需要 执行两个准备工作 :
文件打开有两种方式 :
创建文件流对象同时指定参数打开文件 : 在 创建文件流对象 时 在 构造函数 参数中 , 设置 文件路径 和 访问方式 ;
代码示例 :
// 创建 文件输出流 对象
// 1. 与 1.txt 文件关联
// 2. 设置 访问方式 为 输出数据到文件中
ofstream fout("1.txt", ios::out);
// 创建 文件输入流 对象
// 1. 与 1.txt 文件关联
// 2. 设置 访问方式 为 从文件中读取数据
ifstream fin("1.txt", ios::in);
完整代码示例 :
#include "iostream"
using namespace std;
#include "fstream"
int main() {
// 第一种打开文件方式 : 在创建文件流对象时指定参数
// 第二种打开文件方式 : 先创建文件流对象, 再调用 对象的 open 函数打开文件
// I. 第一种方式 文件输出流
// 创建 文件输出流 对象
// 1. 与 1.txt 文件关联
// 2. 设置 访问方式 为 输出数据到文件中
ofstream fout("1.txt", ios::out);
// 向文件中写出字符
fout << "Hello World!" << endl;
// 关闭文件
fout.close();
// II. 第一种方式 文件输入流
// 创建 文件输入流 对象
// 1. 与 1.txt 文件关联
// 2. 设置 访问方式 为 从文件中读取数据
ifstream fin("1.txt", ios::in);
cout << "从文件中读取的数据 : ";
// 存储读取的单个字节
char c;
// 从文件中读取单个字符
while (fin.get(c))
{
// 输出单个字节数据
cout << c;
}
// 输出回车换行
cout << endl;
// 关闭文件
fin.close();
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
从文件中读取的数据 : Hello World!
Press any key to continue . . .
创建 文件流 对象 并打开 :
代码示例 :
// 创建 文件输入流 对象 并打开
// 1. 首先 , 创建 文件输入流 对象
// 2. 然后 , 文件流对象的 open 函数打开文件
ifstream fin;
fin.open("1.txt", ios::in);
// 创建 文件输出流 对象 并打开
// 1. 首先 , 创建 文件输出流 对象
// 2. 然后 , 文件流对象的 open 函数打开文件
ofstream fout;
fout.open("1.txt", ios::out);
完整代码示例 :
#include "iostream"
using namespace std;
#include "fstream"
int main() {
// 第一种打开文件方式 : 在创建文件流对象时指定参数
// 第二种打开文件方式 : 先创建文件流对象, 再调用 对象的 open 函数打开文件
// I. 第二种方式 文件输出流
// 创建 文件输出流 对象 并打开
// 1. 首先 , 创建 文件输出流 对象
// 2. 然后 , 文件流对象的 open 函数打开文件
ofstream fout;
fout.open("1.txt", ios::out);
// 向文件中写出字符
fout << "Hello World!" << endl;
// 关闭文件
fout.close();
// II. 第二种方式 文件输入流
// 创建 文件输入流 对象 并打开
// 1. 首先 , 创建 文件输入流 对象
// 2. 然后 , 文件流对象的 open 函数打开文件
ifstream fin;
fin.open("1.txt", ios::in);
cout << "从文件中读取的数据 : ";
// 存储读取的单个字节
char c;
// 从文件中读取单个字符
while (fin.get(c))
{
// 输出单个字节数据
cout << c;
}
// 输出回车换行
cout << endl;
// 关闭文件
fin.close();
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
从文件中读取的数据 : Hello World!
Press any key to continue . . .
文件流 读写操作完毕后 , 要释放资源 , 调用 文件流对象的 close() 函数 , 即可关闭文件 , 之后就不能使用该 文件流对象 访问 文件了 ;
代码示例 : 在文件操作完毕后 , 调用 close() 函数 关闭文件 ;
ofstream fout;
fout.open("1.txt", ios::out);
// 向文件中写出字符
fout << "Hello World!" << endl;
// 关闭文件
fout.close();
右键 " 解决方案资源管理器 " 中的 资源文件 , 选择 " 添加 / 新建项 " 选项 ,
创建 实用工具 中的 文件文件 ;