一、前言
程序运行数据仅存在内存,关闭程序数据丢失。文件流可以读写本地磁盘 txt 文件,实现数据持久化。C++ 文件流分三类:
ifstream:文件输入流,读取本地文件内容ofstream:文件输出流,写入 / 覆盖文件内容fstream:读写双向流,同时支持读 + 写文件必须引入头文件:
#include <fstream>
二、ofstream 写入文件
1. 覆盖写入(默认模式,打开文件清空原有内容)
cpp
运行
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
// 创建输出流对象,绑定test.txt
ofstream outFile("test.txt");
// 判断文件是否正常打开
if(!outFile.is_open())
{
cout << "文件打开失败" << endl;
return 1;
}
// 向文件写入内容,用法同cout
outFile << "C++文件写入测试" << endl;
outFile << "第二行文本:123456" << endl;
// 关闭文件,释放资源
outFile.close();
return 0;
}
2. 追加写入(不覆盖原有内容,末尾新增)
打开文件时传入追加模式参数 ios::app
cpp
运行
ofstream outFile("test.txt", ios::app);
三、ifstream 读取文件内容
两种读取方式:逐字符读取、逐行读取 getline
1. 逐行读取完整文本(推荐)
cpp
运行
ifstream inFile("test.txt");
if(!inFile.is_open())
{
cout << "文件打开失败" << endl;
return 1;
}
string line;
// 循环读取每一行,直到文件末尾
while(getline(inFile, line))
{
cout << line << endl;
}
inFile.close();
2. >> 符号读取(自动忽略空格、换行)
适合读取数字、无空格单词
cpp
运行
string word;
while(inFile >> word)
{
cout << word << " ";
}
四、fstream 同时读写文件
打开模式组合:ios::in | ios::out
cpp
运行
fstream file("test.txt", ios::in | ios::out);
五、文件打开模式参数汇总
表格
六、文件状态判断函数
is_open():文件成功打开返回 trueeof():读取到文件末尾返回 truefail():读写失败返回 true
七、新手易错点
文件路径错误、权限不足,is_open 返回 false,忘记判断直接读写
写入后不调用
close(),缓冲区数据未落地,文件空白追加写入忘记加
ios::app,每次打开清空全部旧内容混合
>>和getline读取,换行符残留导致读取空行
八、综合实战:学生信息持久化存储(写入 + 读取)
cpp
运行
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// 保存学生信息到文件
void saveStu()
{
ofstream out("student.txt");
out << "小明 18 95" << endl;
out << "小红 17 88" << endl;
out.close();
}
// 读取文件打印所有学生
void readStu()
{
ifstream in("student.txt");
string name;
int age, score;
while(in >> name >> age >> score)
{
cout << "姓名:" << name << " 年龄:" << age << " 分数:" << score << endl;
}
in.close();
}
int main()
{
saveStu();
readStu();
return 0;
}
九、下期预告
下一篇:C++ 异常捕获 try-catch-throw 错误处理完整教程