示例一:
逐个读取字节方式把文件stu.txt内容复制到stu_data.txt。
源代码:
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
int main()
{
char data;
FILE* fp1, * fp2;
fp1 = fopen("stu.txt", "rb");
fp2 = fopen ("stu_data.txt", "wb");
if (fp1 == NULL || fp2 == NULL)
{
printf("Can not open the files!\n");
exit(0);
}
fread(&data, sizeof(char), 1, fp1);
while (!feof(fp1))//理解为feof返回值为非真时执行while内语句,
//由于feof未结束时返回的都是0,因此可以作为判断标准
//或者写成"while(feof(fp1)==0)"
{
fwrite(&data, sizeof(char), 1, fp2);
fread(&data, sizeof(char), 1, fp1);
}
fclose(fp1);
fclose(fp2);
return 0;
}
示例二:
从键盘中依次输入三个学生的信息到结构体变量中,同时把结构体变量中的信息写到“stu_data.dat”中(二进制文件),最后从文件中读取所有学生的信息并显示。
源代码:
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
struct STU
{
char name[10];
int age;
float score;
};
int main()
{
struct STU stu;//只能设置为单个的结构体,不能设置为数组,因为读取和写入都是一行一行的,读取/写入一次就会覆盖一次stu
FILE* fp;
int i;
fp = fopen("stu_data.dat", "wb");
if (fp == NULL)
{
printf("无法打开文件\n");
exit(0);
}
for (i = 0; i < 3; i++)
{
printf("请输入学生_%d的姓名、年龄、成绩:", i + 1);
scanf("%s %d %f", stu.name, &stu.age, &stu.score);
fwrite(&stu, sizeof(struct STU), 1, fp);
}
fclose(fp);
fp = fopen("stu_data.dat", "rb");
if (fp == NULL)
{
printf("无法打开文件\n");
exit(0);
}
printf("\n学生信息为:\n");
i = 1;
while (fread(&stu, sizeof(struct STU), 1, fp) == 1)
{
printf("学生_%d的姓名%s 年龄:%4d 成绩:%6.2f\n",
i++, stu.name, stu.age, stu.score);
//不能在后面fread,while循环中已经在每一次循环执行了fread,
//在内部执行fread则还没来得及输出这一行,就会被while循环中的fread再次读取覆盖掉数据
}
fclose(fp);
return 0;
}
如果用记事本打开“stu_data.dat”文件,看见的会是一串乱码,乱码表示文件类型不是文本文件