仅作笔记用:C语言 将结构体以二进制形式写入文件

发布时间 2023-10-11 14:22:09作者: wujiuqier

直接以文本文件的方式写入固然也可以,但是如果遇到数据量大的情况,会占用比较多的磁盘空间。这里收集汇总了一下将结构体数据写入二进制文件以及后续读取为结构体的办法。

写入二进制文件的话,成员变量就可以直接以例如 intfloatdouble 这样的形式存储到磁盘,而不是转换成字符串,这样不仅节省磁盘空间,也省去了字符串到数值变量的相互转换的程序编写。

运行写入程序后会在当前目录生成一个 tom.psn 的文件,这是以二进制形式储存的,而不是字符串文本。

而读取程序则将当前目录的 tom.psn 文件直接转换为相应的结构体实例,并输出需要的成员变量。

// 写入文件
#include <stdio.h>

struct Person {
	char name[20];
	int age;
	float height;
};

int main() {
	struct Person pWrite;
	FILE *fp;

	fp = fopen("tom.psn", "wb");
	strcpy(pWrite.name, "Tom");
	pWrite.age = 20;
	pWrite.height = 1.75;
	fwrite(&pWrite, sizeof(struct Person), 1, fp);
	fclose(fp);

	return 0;
}
// 读取文件
#include <stdio.h>

struct Person {
	char name[20];
	int age;
	float height;
};

int main() {
	struct Person pRead;
	FILE *fp;

	fp = fopen("tom.psn", "rb");
	fread(&pRead, sizeof(struct Person), 1, fp);
	printf("Read result:\nName: %s\nAge: %d\nHeight: %.2f\n", pRead.name, pRead.age, pRead.height);
	fclose(fp);
	return 0;
}

/* 输出:
Read result:
Name: Tom
Age: 20
Height: 1.75
*/