跳到主要内容

文件

文件用于把程序运行中的数据持久化保存到磁盘。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 返回值。
  • 文本模式和二进制模式混用。
  • 读取字符串时缓冲区过小。
  • 写入结构体时忽略平台字节序和对齐差异。

七、练习

  • 统计文件行数。
  • 复制文件。
  • 读取学生成绩并排序。
  • 把结构体数组保存到文件。