【C学习笔记】二进制读写文件

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void WriteText()
{
	//初始化一些数据,写入文本文件data.txt;
	char * str = "锄禾日当午,\n汗滴禾下土。\n谁知盘中餐,\n粒粒皆辛苦!";
	FILE *p = fopen("./data.txt", "w");
	if (p == NULL)
	{
		perror("文件创建失败");
		return;
	}
	fputs(str, p); //fputs 以行的形式写入文件;
	fclose(p);
}


typedef struct Hero
{
	char *name;
	char *id;
	int power;
} HERO;

#define HEORNUM 5


void WriteBinaryText() //准备写入二进制数据; 以结构为基本内容;
{
	//初始化写入的数据;
	HERO hero[HEORNUM] = {
		{ "李白", "11111", 100 }, 
		{ "曹操", "22222", 120 },
		{ "孙权", "33333", 213 }, 
		{ "西施", "44444", 421 }, 
		{ "孔明", "55555", 856 } };

	FILE *pf = fopen("./hero.txt", "wb");//以二进制写入;
	if (pf==NULL)
	{
		perror("创建文件失败");
		return;
	}
	
	for (int i = 0; i < HEORNUM; i++)
	{
		fwrite(&hero[i], sizeof(hero[i]), 1, pf);
	}
	fclose(pf);
	printf("文件写入成功!\n");
}

void ReadBinaryText()
{
	FILE *pf = fopen("./hero.txt", "rb");
	if (pf==NULL)
	{
		perror("打开文件错误");
		return;
	}
	HERO hero[HEORNUM];
	for (int i = 0; i < HEORNUM; i++)
	{
		fread(&hero[i], sizeof(hero[i]), 1, pf);
		printf("name = %-6s id = %-6s power = %-6d\n", hero[i].name, hero[i].id, hero[i].power);
	}
	fclose(pf);
	printf("文件读出完成!\n");
}

void main()
{
	void WriteText();
	WriteBinaryText();
	ReadBinaryText();
	system("pause");
}

测试结果:

【C学习笔记】二进制读写文件