文件读写
概念说明
文件操作让程序的数据可以脱离内存,在程序结束后仍然保留下来。
C 标准库通过 FILE * 表示打开的文件流,并提供一组函数完成读写、定位和关闭。
文件处理大致可以分成几类:
- 文本读写:例如
fgets、fputs、fprintf、fscanf - 二进制块读写:例如
fread、fwrite - 随机定位:例如
fseek、ftell、rewind
学文件时一定要把“模式对吗、打开成功了吗、最后关闭了吗”当成固定检查项。 这类问题如果忽略,程序往往不是编译时报错,而是运行时行为异常。
语法/规则
fopen用于打开文件,常见模式有r、w、a、rb、wb、ab。- 打开文件后要检查返回值是否为
NULL。 - 文本写入常见函数有
fputs、fprintf,文本读取常见函数有fgets、fscanf。 - 二进制块读写常见函数有
fread和fwrite。 - 随机读写常配合
fseek、ftell、rewind使用。 feof和ferror用于辅助判断读写结束原因,不应先用feof预测下一次读取是否成功。- 文件使用完毕后要调用
fclose关闭;长期运行程序里,这一步尤其重要。
示例
文本文件读写
| |
输出结果:
| |
二进制块读写与定位
| |
输出结果:
| |
常见错误
fopen失败后直接继续读写,导致空指针使用问题。- 文件打开模式写错,例如本来想追加却用了
w,结果覆盖了原内容。 - 文本和二进制场景混用读写接口,却没有明确自己到底在处理什么格式的数据。
- 试图用
feof预判下一次是否还能读,结果把循环控制写反。 - 忘记
fclose,长期运行程序里可能造成资源泄漏或数据未及时落盘。