文件读写
fopen/fclose、fprintf/fscanf、fgets/fputs、二进制读写
文件读写
C 把文件当作一个字节流——文本文件和二进制文件的读写语法一样,只是模式不同。
学完本章你将: 掌握 fopen/fclose、文本读写、二进制读写、错误处理。
fopen 打开文件
c
#include <stdio.h>
int main() {
// 模式:r(读) w(写) a(追加) r+(读写) w+(读写) b(二进制)
FILE *fp = fopen("data.txt", "w");
if (fp == NULL) {
perror("打开文件失败"); // 打印错误原因
return 1;
}
fprintf(fp, "Hello, File!\n");
fprintf(fp, "数字:%d\n", 42);
fclose(fp); // 必须关闭!
return 0;
}
文本文件读取
c
// 方式 1:逐行读
FILE *fp = fopen("data.txt", "r");
char line[256];
while (fgets(line, sizeof(line), fp) != NULL) {
printf("%s", line);
}
fclose(fp);
// 方式 2:格式化读
int num;
fscanf(fp, "%d", &num);
// 方式 3:逐字符
int ch;
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
二进制文件读写
c
// 写入二进制
int data[] = {1, 2, 3, 4, 5};
FILE *fp = fopen("data.bin", "wb");
fwrite(data, sizeof(int), 5, fp);
fclose(fp);
// 读取二进制
int buf[5];
fp = fopen("data.bin", "rb");
fread(buf, sizeof(int), 5, fp);
fclose(fp);
💡 二进制文件更紧凑、更快——不经过字符转换,直接存内存内容。
错误检测
c
FILE *fp = fopen("maybe_not_exist.txt", "r");
if (fp == NULL) {
perror("fopen"); // 输出 "fopen: No such file or directory"
return 1;
}
// 读取时检测结束
if (feof(fp)) printf("读到末尾了\n");
if (ferror(fp)) printf("读取出错了\n");