一、读取二进制文件
#include <stdio.h> int main() { FILE *fp; char buffer[10]; fp = fopen("data.bin", "rb"); //以二进制方式打开文件 fread(buffer, sizeof(char), 10, fp); //读取10个字节 fclose(fp); return 0; }
fread函数用于读取二进制文件,包括图像、视频、音频等多媒体格式,具有很高的应用价值。
在代码中,我们首先使用fopen函数以rb方式打开文件,rb表示以二进制方式读取文件。然后定义一个char类型的数组buffer,长度为10,利用fread函数读取二进制文件的前10个字节。最后使用fclose函数关闭文件。
二、读取文本文件
#include <stdio.h> int main() { FILE *fp; char buffer[100]; fp = fopen("data.txt", "r"); //以文本方式打开文件 fread(buffer, sizeof(char), 100, fp); //读取100个字节 fclose(fp); return 0; }
不同于二进制文件,文本文件需要以不同的方式读取。在代码中,我们使用fopen函数以r方式打开文件,r表示以文本方式读取文件。然后定义一个char类型的数组buffer,长度为100,利用fread函数读取文本文件的前100个字节,最后使用fclose函数关闭文件。
三、产生截断效果
#include <stdio.h> int main() { FILE *fp; char buffer[100]; fp=fopen("data.txt", "r"); fread(buffer, sizeof(char), 100, fp); fclose(fp); printf("%s\n", buffer); return 0; }
如果读取的字节数大于文件实际的大小,fread函数会自动产生截断效果。在代码中,我们打开一个只有5个字符的文本文件,然后读取100个字节并保存到buffer数组中,最后使用printf函数输出buffer中的字符串。由于读取的字节数大于文件实际大小,所以输出结果中会出现一些奇怪的字符。
四、读取指定长度
#include <stdio.h> int main() { FILE *fp; char buffer[100]; fp = fopen("data.txt", "r"); fseek(fp, 5, SEEK_SET); //移动文件指针到第5个字符处 fread(buffer, sizeof(char), 10, fp); //读取10个字符 fclose(fp); buffer[10] = '\0'; //添加字符串结束标志 printf("%s\n", buffer); return 0; }
fread函数可以读取任意长度的数据,但是我们也可以指定读取的长度。在代码中,我们首先使用fseek函数移动文件指针到第5个字符处,然后利用fread函数读取10个字符,并保存到buffer数组中。最后使用printf函数输出buffer中的字符串,注意要手动添加字符串结束标志。
五、读取成员为struct类型的数据
#include <stdio.h> struct student { char name[20]; int age; float score; }; int main() { FILE *fp; struct student st; fp = fopen("data.bin", "rb"); fread(&st, sizeof(struct student), 1, fp); //读取一个struct成员 fclose(fp); printf("Name: %s\nAge: %d\nScore: %.2f\n", st.name, st.age, st.score); return 0; }
fread函数不仅可以读取基本数据类型,还可以读取struct类型的数据。在代码中,我们定义了一个名为student的struct类型,包含3个成员:name、age和score。然后我们利用fopen函数以二进制方式打开文件,利用fread函数读取一个struct成员并保存到st结构体中,最后使用printf函数输出st中的成员信息。