文件处理
计算机科学· 20 分钟阅读
1. 核心文件生命周期:打开、处理、关闭★★☆☆☆⏱ 5 min
所有文件操作都遵循标准的三步生命周期:打开文件获取访问权限,执行读取或写入操作,完成后关闭文件。关闭文件对于释放系统资源、确保所有内存中的数据都写入永久存储至关重要。
文件模式
指定打开文件可执行哪些操作,以及如何解释文件内容的设置。
例:
常见模式:读取、写入、追加、文本、二进制
编写CIE标准伪代码,以读取模式打开文本文件scores.txt,将第一行输出到控制台,然后关闭文件。
- 1
声明一个文件句柄引用打开的文件,以及一个字符串变量存储读取的行:
- 2
DECLARE FileHandle : FILE DECLARE FirstLine : STRING - 3
以只读模式打开文件:
- 4
OPENFILE "scores.txt" FOR READ AS FileHandle - 5
读取第一行,输出它,然后关闭文件:
- 6
READLINE FileHandle, FirstLine OUTPUT FirstLine CLOSEFILE FileHandle
2. 文本文件 vs 二进制文件模式★★★☆☆⏱ 6 min
文本文件将数据存储为人类可读的字符序列,使用ASCII或UTF-8等标准编码。二进制文件直接存储原始二进制数据,更紧凑,并且保留原始数据类型的准确大小。
比较整数123在文本文件和4字节整数二进制文件中的存储方式。
- 1
文本文件中:整数被转换为三个独立字符
'1','2','3',占用3字节存储空间,在文本编辑器中打开会显示可读文本123。 - 2
二进制文件中:整数123的原始4字节二进制值被直接存储,占用4字节存储空间,在文本编辑器中打开会显示不可读的非打印字符。
3. 常见文件操作★★★☆☆⏱ 7 min
除了基础的单行读取,你通常还需要逐行处理整个文件、向现有文件追加新数据,或搜索特定条目。EOF(文件结束)标记用于检测是否已经到达文件内容末尾。
编写伪代码,统计名为data.txt的文本文件的总行数。
- 1
初始化计数器为0,打开文件以供读取:
- 2
DECLARE Count : INTEGER ← 0 DECLARE CurrentLine : STRING OPENFILE "data.txt" FOR READ - 3
循环遍历文件,逐行读取直到到达文件末尾,每次循环递增计数器:
- 4
WHILE NOT EOF("data.txt") DO READLINE "data.txt", CurrentLine Count ← Count + 1 ENDWHILE - 5
关闭文件,输出最终计数:
- 6
CLOSEFILE "data.txt" OUTPUT "Total lines: " + Count
测试你的理解:
要在不删除现有内容的情况下向已有文件末尾添加新数据,应该使用哪种模式?
读取模式
写入模式
追加模式
二进制模式
显示答案
2 —正确!追加模式将新数据添加到文件末尾,而写入模式会覆盖整个现有文件。
4. 文件错误处理★★★★☆⏱ 6 min
文件操作经常会在运行时因常见原因失败:文件不存在、权限错误,或存储设备已满。良好的编程习惯要求检查这些错误并妥善处理,而不是让程序崩溃。
文件未找到错误
常见运行时错误,当程序尝试打开指定路径中不存在的文件时发生。
修改上面的行数统计代码,处理data.txt不存在的情况。
- 1
打开文件后,添加检查确认文件存在,再进行处理:
- 2
OPENFILE "data.txt" FOR READ IF NOT FILEEXISTS "data.txt" THEN OUTPUT "Error: Input file not found" STOP ENDIF - 3
行数统计的其余代码保持不变,但程序会向用户输出清晰的错误消息,而不是意外崩溃。
5. 常见陷阱
错误做法:
打开文件后忘记关闭
原因:
会导致系统资源仍被占用,还可能造成数据没有保存到磁盘
正确做法:
完成对打开文件的操作后,一定要添加显式的CLOSEFILE语句
错误做法:
向已有文件添加数据时使用写入模式
原因:
写入模式会覆盖整个现有文件,在添加新数据前清除所有原始内容
正确做法:
要向已有文件末尾添加新数据时使用追加模式
错误做法:
读取下一个条目前不检查EOF
原因:
会导致读取文件结束后的垃圾数据,或在执行过程中出现运行时错误
正确做法:
始终将重复读取操作包装在WHILE NOT EOF()循环中,在内容末尾停止
错误做法:
用和二进制文件相同的方式计算文本文件大小
原因:
文本文件将数据存储为可变长度字符,而二进制文件每个数据类型使用固定大小
正确做法:
文本文件通过统计字符数得到大小;二进制文件则用记录数乘以固定记录大小
错误做法:
读取模式下不处理文件缺失的情况
原因:
阅卷官要求健壮的错误处理,未处理的错误会被扣分
正确做法:
以读取模式打开文件后,一定要添加FILEEXISTS检查
6. 速查表
操作 | CIE伪代码 | 常见用途 |
|---|---|---|
打开只读 | OPENFILE "f.txt" FOR READ | 读取现有文件 |
打开写入 | OPENFILE "f.txt" FOR WRITE | 创建/覆盖文件 |
打开追加 | OPENFILE "f.txt" FOR APPEND | 向文件末尾添加数据 |
读取行 | READLINE handle, lineVar | 读取一行文本 |
写入行 | WRITELINE handle, data | 写入一行输出 |
检查文件结束 | NOT EOF(handle) | 循环遍历所有内容 |
检查文件存在 | FILEEXISTS "filename" | 处理文件缺失错误 |
关闭文件 | CLOSEFILE handle | 保存修改,释放资源 |
真题中的出现
AI 根据考纲规律估算的考点位置,请对照官方真题核实准确性。仅作复习重点参考。
- 2022 · 12
文本文件搜索题
- 2023 · 13
二进制文件记录写入题
- 2024 · 12
文件错误处理题
下一步
文件处理是CIE A-Level计算机科学理论卷和实践卷的核心基础技能。它经常在理论多选题中考察,也是大多数编程实践任务的核心部分,因此掌握完整的文件生命周期对于拿到满分至关重要。在熟练掌握顺序文件处理后,你可以继续学习建立在此基础上的更高级存储概念。你也可以广泛练习错误处理,提高考试中编程的健壮性。
