通讯录的制做(转化为文件形式存储)

前面我们学习到了通讯录使用动态内存去开辟空间,现在学习了文件操作之后我们可以实现将通讯录转化为文件形式储存,我们就可以读取到我们之前存储的内容,而且我们之后加入的内容也不会随着程序的关闭而消失。

所以,为了实现这一存储成为文件的功能,首先我们要在项目路径处创建一个文本文件:

假设我们原先通讯录上存有信息,我们首先要读取内容,下面是读取文件信息的代码:

void Loadcontact(contact* pc)
{
	//打开文件
	FILE* p = fopen("text.txt", "rb");
	if (p == NULL)
	{
		perror("fopen");
		return;
	}
	//因为默认的容量为3,我们同时不知道文本中有几个元素,我们只能一个一个读取,一个一个存储
	PeoInfo tmp = { 0 };
	while (fread(&tmp, sizeof(PeoInfo), 1, p))//fread的返回值是成功读取到的元素个数
	{
		Checkcapcity(pc);
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}
	fclose(p);
	p = NULL;
}

这段代码我们需要放在初始化的函数中,因为我们先要加载出之前的信息,这个代码就是实现的这一功能。

到了最后当我们需要退出时,我们也需要将输入的信息写入文件之中,下面是代码的实现:

void Savacontact(contact* pc)
{
	FILE* p = fopen("text.txt", "wb");
	if (p == NULL)
	{
		perror("fopen:");
		return;
	}
	int i = 0;
	for(i = 0;i < pc->sz;i++)
	{
		fwrite(pc->data + i, sizeof(PeoInfo), 1, p);//将信息写入文件之中
	}
	fclose(p);
	p = NULL;
}

最后是运行的截图:

这里先增容是因为我们先前在文件中写入了4个元素。

这里我们添加了8等元素

这是加入后文件的信息,说明添加成功了。 

最后我们开一眼文本储存的数据: 为什么会这样呢??

原来啊,我们将数据采用二进制的方式存储,所以看到的就像乱码一样。

到这里我们便将一个简单的通讯录讲完了,我们既可以实现存储信息的功能,同时我们还可以将信息转化为文本文件,这样我们就可以实现一个“半永久”式的程序。

谢谢观看!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sugar_goat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值