用户_29571846
发布于 2026-06-22 / 2 阅读
0
0

C++ 文件流 fstream 读写本地 txt 文档完整教程

一、前言

程序运行数据仅存在内存,关闭程序数据丢失。文件流可以读写本地磁盘 txt 文件,实现数据持久化。C++ 文件流分三类:

  1. ifstream:文件输入流,读取本地文件内容

  2. ofstream:文件输出流,写入 / 覆盖文件内容

  3. 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);

五、文件打开模式参数汇总

表格

参数

作用

ios::in

只读打开文件

ios::out

只写,清空原有内容

ios::app

追加写入,保留旧内容

ios::trunc

打开直接清空文件(out 默认)

ios::binary

二进制模式读写(图片、exe)

六、文件状态判断函数

  • is_open():文件成功打开返回 true

  • eof():读取到文件末尾返回 true

  • fail():读写失败返回 true

七、新手易错点

  1. 文件路径错误、权限不足,is_open 返回 false,忘记判断直接读写

  2. 写入后不调用close(),缓冲区数据未落地,文件空白

  3. 追加写入忘记加ios::app,每次打开清空全部旧内容

  4. 混合>>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 错误处理完整教程


评论