fwrite函数----向文件中按块写入数据
fread函数------向文件中按块读取数据
如果向文件中写入的是自定义结构体信息,那么打开记事本是乱码,不代表写入不正确
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct {
char name[32];
int age;
}stu;
//按块写入文件
void test()
{
FILE* fp = fopen("per.txt", "w");
if (fp == NULL)
{
printf("文件打开失败");
return;
}
stu s[3] = { {"孙悟空",100}, {"猪八戒",60},{"沙僧",40} };
//向文件中写入数据
//第一种写法:
int len = sizeof(s) / sizeof(stu);
for (int i = 0; i < len; i++)
{
fwrite(&s[i], sizeof(stu), 1, fp);
}
fclose(fp);
}
//按块读取文件
void test01()
{
FILE* fp = fopen("per.txt", "r");
if (fp == NULL)
{
printf("文件打开失败");
return;
}
stu per[3];
int len = sizeof(per) / sizeof(stu);
//从文件中读取数据
//第一种写法:
for (int i = 0; i < len; i++)
{
fread(&per[i], sizeof(stu), 1, fp);
}
//打印结构体
for (int i = 0; i < len; i++)
{
printf("%s\t%d\n", per[i].name, per[i].age);
}
}
int main()
{
test01();
return 0;
}
第二种写法: 参数1:数据的地址 参数二:块大小 参数 3:块个数 参数4:文件指针 结构体数组存储时连续地址存储,所以可以填数组首地址
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct {
char name[32];
int age;
}stu;
//按块写入文件
void test()
{
FILE* fp = fopen("per.txt", "w");
if (fp == NULL)
{
printf("文件打开失败");
return;
}
stu s[3] = { {"孙悟空",100}, {"猪八戒",60},{"沙僧",40} };
//向文件中写入数据
//第二种写法:
int len = sizeof(s) / sizeof(stu);
fwrite(s, sizeof(stu), 3, fp);
fclose(fp);
}
//按块读取文件
void test01()
{
FILE* fp = fopen("per.txt", "r");
if (fp == NULL)
{
printf("文件打开失败");
return;
}
stu per[3];
int len = sizeof(per) / sizeof(stu);
//从文件中读取数据
fread(per, sizeof(stu), 3, fp);
//打印结构体
for (int i = 0; i < len; i++)
{
printf("%s\t%d\n", per[i].name, per[i].age);
}
}
int main()
{
test01();
return 0;
}