文件的二进制输入(fread)、输出(fwrite)

    1.fwrite(二进制输出)


    //        size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);
    //            const void* ptr:指向待被写数据的指针
    //            size_t size:待写数据的一个元素大小
    //            size_t count:待写数据的元素个数
    //            FILE* stream:指向待写文件的文件指针
    //            size_t fwrite(返回值):实际输出的元素个数,不一定等于count

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S
{
	char name[20];
	int age;
	float score;
};
int main()
{
	struct S s1 = { "zhangsan",24,93.5f };
	//打开文件
	FILE* pf = fopen("test.dat", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fwrite(&s1, sizeof(struct S), 1, pf);	
		//		fwrite是以二进制形式输出(写文件),所以文件打开之后会出现部分内容(准确来说是除了字符串以外的其他类型的内容,因为字符串以二进制形式存储和以文本形式存
		// 储是一样的)不认识或者乱码,因为二进制形式存储和文本形式存储是截然不同的。为解决不认识二进制形式的输出内容这一问题,我们可以再以二进制形式读取(输入)这些内容
	
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

2.fread(二进制输入)


    //        size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
    //            void* ptr:指向用来存放读取到的数据的内存块的指针,该内存块至少可以存放count个元素
    //            size_t size:待读取数据的一个元素大小
    //            size_t count:待读取数据的元素个数
    //            FILE* stream:指向待读文件的文件指针
    //            size_t fread(返回值):fread实际读取到的元素个数,假如count参数是5,而fread实际读取到的元素个数是3,那么返回值就是3 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S
{
	char name[20];
	int age;
	float score;
};
int main()
{
	struct S s2 = {0};
	//打开文件
	FILE* pf = fopen("test.dat", "rb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fread(&s2, sizeof(struct S), 1, pf);
		//		fread是以二进制形式输入(读文件),"test.dat"是文本文件,里边存放了二进制信息,二进制信息在文本文件中我们是看不懂的(除了字符内容,字符的
		// 二进制形式和文本形式是一样的),fread可以读取到文本文件中的二进制信息
	printf("%s %d %f\n", s2.name, s2.age, s2.score);	//zhangsan 24 93.500000
//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

 

猜你喜欢

转载自blog.csdn.net/libj2023/article/details/131745762