0%

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 写入文件
#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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 读取文件
#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
*/
Buy me a coffee
No.5972 Alipay

Alipay

推进创文常态化 共建文明襄阳城 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 做文明襄阳人 建文明襄阳城 凝聚文明正能量 筑梦千年古襄阳 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 创建全国文明城市 加快建设汉江流域中心城市 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 讲文明 树新风 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 用微笑融化陌生 用文明美化襄阳 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 争当文明使者 播撒文明新风