文件打开与关闭
C 语言通过标准库函数操作文件。fopen 打开文件,fclose 关闭文件。文件打开模式决定读写权限和文件处理方式(文本模式或二进制模式)。正确管理文件生命周期是避免资源泄漏和数据损坏的基础。
fopen 基本用法
#include <stdio.h>
FILE *fp = fopen("data.txt", "r"); /* 以只读文本模式打开 */
if (fp == NULL) {
perror("fopen"); /* 输出错误信息 */
return 1;
}
/* 读写操作 */
fclose(fp); /* 关闭文件 */
打开模式
| 模式 | 含义 | 文件存在 | 文件不存在 |
|---|---|---|---|
"r" | 只读文本 | 从头读 | 失败 |
"w" | 只写文本 | 清空 | 创建 |
"a" | 追加文本 | 追加到末尾 | 创建 |
"r+" | 读写文本 | 从头 | 失败 |
"w+" | 读写文本 | 清空 | 创建 |
"a+" | 读写追加 | 追加 | 创建 |
"rb" | 只读二进制 | 同 "r" | 同 "r" |
"wb" | 只写二进制 | 同 "w" | 同 "w" |
二进制模式
FILE *fp = fopen("data.bin", "rb"); /* 二进制读取 */
FILE *fp2 = fopen("output.bin", "wb"); /* 二进制写入 */
Windows 下文本模式会转换 \n ↔ \r\n,二进制模式不转换。
关闭文件
int result = fclose(fp);
if (result != 0) {
perror("fclose");
}
fclose 失败时(如写入缓冲区失败),应处理错误。
常见错误
未检查 fopen 返回值:
FILE *fp = fopen("data.txt", "r");
fgetc(fp); /* 崩溃:fp 可能为 NULL */
/* 正确 */
FILE *fp = fopen("data.txt", "r");
if (fp != NULL) {
/* 操作 */
fclose(fp);
}
忘记关闭:
void process(void)
{
FILE *fp = fopen("data.txt", "r");
/* 操作 */
/* 忘记 fclose(fp) → 资源泄漏 */
}
关闭后使用:
fclose(fp);
fgetc(fp); /* 未定义行为 */
最佳实践
- 始终检查
fopen返回值 - 配对使用
fopen/fclose - 二进制数据用
"b"模式 - 程序退出前关闭所有文件
- 用
perror输出文件操作错误