文件
文件用于把程序运行中的数据持久化保存到磁盘。C 语言通过标准库提供文件读写能力。
一、打开和关闭文件
FILE *fp = fopen("data.txt", "r");
if (fp == NULL) {
perror("open file failed");
return 1;
}
fclose(fp);
常见模式:
| 模式 | 说明 |
|---|---|
| r | 只读,文件必须存在 |
| w | 只写,文件不存在则创建,存在则清空 |
| a | 追加写 |
| r+ | 读写,文件必须存在 |
| w+ | 读写,清空或创建 |
| rb/wb | 二进制读写 |
二、字符读写
int ch = fgetc(fp);
fputc('A', fp);
三、行读写
char buf[1024];
fgets(buf, sizeof(buf), fp);
fputs("hello\n", fp);
四、格式化读写
fprintf(fp, "%d %s\n", id, name);
fscanf(fp, "%d %s", &id, name);
五、二进制读写
fwrite(&obj, sizeof(obj), 1, fp);
fread(&obj, sizeof(obj), 1, fp);
六、常见问题
- 打开文件后忘记关闭。
- 没有检查
fopen返回值。 - 文本模式和二进制模式混用。
- 读取字符串时缓冲区过小。
- 写入结构体时忽略平台字节序和对齐差异。
七、练习
- 统计文件行数。
- 复制文件。
- 读取学生成绩并排序。
- 把结构体数组保存到文件。