8.1 文件的打开与关闭
文件让程序可以把数据保存到程序结束之后,也可以在之后再读回来。C 用 FILE * 表示一个已经打开的文件。
c
FILE *fp = fopen("data.txt", "r");
if (fp == NULL) {
fprintf(stderr, "open failed\n");
return 1;
}
fclose(fp);fopen() 成功时返回一个 FILE *。如果路径写错、文件不存在、权限不足,就会返回 NULL。使用文件指针之前,一定先检查它是否为 NULL。
fopen() 的第二个参数是打开模式。模式决定文件是否必须已经存在、旧内容会不会保留,以及写入从哪里开始。
| 模式 | 能读吗 | 能写吗 | 文件不存在时 | 文件已存在时 | 写入位置 |
|---|---|---|---|---|---|
"r" | 可以 | 不可以 | 打开失败 | 保留原内容 | 不能写 |
"w" | 不可以 | 可以 | 创建文件 | 清空原内容 | 文件开头 |
"a" | 不可以 | 可以 | 创建文件 | 保留原内容 | 文件末尾 |
"r+" | 可以 | 可以 | 打开失败 | 保留原内容 | 文件开头 |
"w+" | 可以 | 可以 | 创建文件 | 清空原内容 | 文件开头 |
"a+" | 可以 | 可以,但只能追加 | 创建文件 | 保留原内容 | 每次写入都在末尾 |
带 + 的模式允许同时读写,但要小心选择:"w+" 仍然会先清空文件,"a+" 仍然会把每次写入放到文件末尾。
用完文件要 fclose()。C 经常会先把输出暂存在缓冲区里,关闭文件会刷新这些数据,也会释放文件资源。
正在加载交互实验...
正在加载概念检查...
正在加载本节练习...