C&C++快速入门
18、文件操作C
1、课程目标
- 掌握C语言文件IO函数
- 理解文本模式与二进制模式
- 掌握文件指针操作
- 了解常见的文件操作模式
2、名词解释
| 函数 | 说明 |
|---|---|
| fopen | 打开文件 |
| fclose | 关闭文件 |
| fread | 二进制读取 |
| fwrite | 二进制写入 |
| fprintf/fscanf | 格式化读写 |
| fgets/fputs | 行读写 |
| fseek/ftell | 文件定位 |
| EOF | 文件结束标识 |
3、代码实现
1. 基础文件操作
#include <stdio.h>
int main() {
// 写入文件
FILE* fp = fopen("test.txt", "w");
if (fp == NULL) {
printf("打开文件失败!\n");
return 1;
}
fprintf(fp, "Hello, File!\n");
fprintf(fp, "行2: 数字 %d\n", 42);
fclose(fp);
printf("写入成功\n");
// 读取文件
fp = fopen("test.txt", "r");
if (fp) {
char line[256];
printf("\n文件内容:\n");
while (fgets(line, sizeof(line), fp)) {
printf("%s", line);
}
fclose(fp);
}
return 0;
}
2. 二进制文件
#include <stdio.h>
typedef struct {
int id;
char name[32];
float score;
} Student;
int main() {
// 写入二进制数据
Student students[] = {
{1, "Alice", 95.5f},
{2, "Bob", 87.0f},
{3, "Charlie", 92.3f}
};
FILE* fp = fopen("students.dat", "wb");
if (fp) {
fwrite(students, sizeof(Student), 3, fp);
fclose(fp);
printf("二进制写入成功\n");
}
// 读取二进制数据
Student loaded[3];
fp = fopen("students.dat", "rb");
if (fp) {
fread(loaded, sizeof(Student), 3, fp);
fclose(fp);
printf("\n读取结果:\n");
for (int i = 0; i < 3; i++) {
printf("ID=%d, Name=%s, Score=%.1f\n",
loaded[i].id, loaded[i].name, loaded[i].score);
}
}
return 0;
}
3. 文件定位
#include <stdio.h>
int main() {
FILE* fp = fopen("test.txt", "rb");
if (!fp) return 1;
// 获取文件大小
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
printf("文件大小: %ld 字节\n", size);
// 回到开头
fseek(fp, 0, SEEK_SET);
// 读取前10个字节
char buffer[11] = {0};
fread(buffer, 1, 10, fp);
printf("前10字节: %s\n", buffer);
fclose(fp);
return 0;
}
4、课后作业
4.1、作业1:文件复制
实现二进制文件复制功能。
4.2、作业2:简单配置文件解析
解析key=value格式的配置文件。