GESP 四级 第 06 讲:文件操作与异常处理

本讲定位:四级最后两个知识块,也是性价比最高的一讲。内容少、几乎全是记忆题,但每场必考 1~2 道(2026 年 3 月真题判断题第 8 题就是文件写入)。花两节课就能把这 2~4 分锁死。

对应官方大纲:四级知识块 7「文件操作」——文件重定向,读操作、写操作、读写操作;知识块 8「异常处理」——异常处理机制和常用方法。大纲另要求”了解文本文件的分类”。

前置知识cin / cout 的基本用法。

代码说明:本讲代码均已用 g++ 11.5(-std=c++11)编译运行验证,文件读写实测生成并读回。


1. 先看一道真题:这一讲的价值

2026 年 3 月四级判断题第 8 题(原题):

下面程序能够把 Hello 写入 data.txt 文件中。

ofstream fout("data.txt");
cout << "Hello";
fout.close();

答案:❌ 错误。

为什么? 文件流 fout 确实打开了,但接下来写的是 cout(屏幕),不是 fout(文件)。Hello 被输出到了控制台,data.txt 是个空文件

正确写法只差一个字母:

ofstream fout("data.txt");
fout << "Hello";                // ← 这里必须是 fout
fout.close();

📌 这就是本讲的典型出题方式:不考复杂逻辑,只考你有没有仔细看清楚每个标识符。让学生养成”读文件操作题时,用手指点着每个流对象的名字念一遍”的习惯。


2. 文件重定向(freopen

2.1 是什么

重定向:让原本从键盘读、往屏幕写的 cin / cout,改成从文件读、往文件写。

#include<cstdio>// freopen 在这个头文件里

int main() {
    freopen("input.txt",  "r", stdin);    // 以后 cin 从 input.txt 读
    freopen("output.txt", "w", stdout);   // 以后 cout 写到 output.txt

    int a, b;
    cin >> a >> b;          // 从 input.txt 读
    cout << a + b << endl;  // 写到 output.txt

    fclose(stdin);
    fclose(stdout);
    return 0;
}

三个参数要背:

参数 含义 常用值
第 1 个 文件名 "input.txt"
第 2 个 打开模式 "r" 读、"w" 写、"a" 追加
第 3 个 重定向哪个流 stdin(输入)、stdout(输出)

⚠️ 极高频陷阱"r"stdin"w"stdout配反了(如 freopen("in.txt","w",stdin))是错的,选择题常在这里挖坑。记法:读入配 r,输出配 w。

2.2 最大的实用价值:上机调试