在C语言中,文件读写是通过标准输入输出库stdio.h提供的一组函数完成的。程序通过FILE指针来关联一个外部文件,再进行打开、读写和关闭等操作。理解文件指针和打开模式是学会文件读写的第一步。

一、文件指针与打开关闭
所有文件操作都围绕FILE类型指针展开。使用fopen函数打开文件,成功后返回FILE指针,失败返回NULL。操作结束后必须调用fclose关闭文件,释放系统资源。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "w"); // 以写文本模式打开
if (fp == NULL) {
printf("文件打开失败n");
return 1;
}
fprintf(fp, "hello c filen"); // 写入文本
fclose(fp); // 关闭文件
return 0;
}
二、常见的打开模式
fopen的第二个参数是模式字符串,决定了文件如何被访问。常用模式如下:
| 模式 | 含义 |
|---|---|
| r | 只读打开文本文件,文件必须存在 |
| w | 只写创建文本文件,存在则清空 |
| a | 追加写文本文件,在末尾添加内容 |
| rb / wb / ab | 同上,但用于二进制文件 |
| r+ / w+ / a+ | 读写模式组合 |
三、文本文件的读写
文本文件适合存字符串或格式化数据。写用fprintf,读用fscanf或fgets。
#include <stdio.h>
int main() {
FILE *fp = fopen("data.txt", "r");
if (fp == NULL) return 1;
char buf[100];
while (fgets(buf, sizeof(buf), fp) != NULL) { // 逐行读取
printf("%s", buf);
}
fclose(fp);
return 0;
}
四、二进制文件的读写
二进制文件用fwrite和fread,可以直接存取结构体等内存数据,效率更高。
#include <stdio.h>
typedef struct {
int id;
double score;
} Student;
int main() {
Student s = {1, 95.5};
FILE *fp = fopen("stu.bin", "wb");
fwrite(&s, sizeof(Student), 1, fp); // 写二进制
fclose(fp);
Student r;
fp = fopen("stu.bin", "rb");
fread(&r, sizeof(Student), 1, fp); // 读二进制
fclose(fp);
printf("id=%d score=%.1fn", r.id, r.score);
return 0;
}
五、注意事项
- 打开文件后务必检查返回值是否为NULL,避免空指针错误。
- 文件使用完毕一定要调用fclose,否则可能丢失缓冲区数据。
- 二进制模式在Windows下能避免换行符转换问题,跨平台建议用b模式。
文件读写是C语言项目中最常用的持久化手段,熟练运用FILE指针和对应函数,就能完成日志、配置、数据存储等常见任务。