前面我们学习到了通讯录使用动态内存去开辟空间,现在学习了文件操作之后我们可以实现将通讯录转化为文件形式储存,我们就可以读取到我们之前存储的内容,而且我们之后加入的内容也不会随着程序的关闭而消失。
所以,为了实现这一存储成为文件的功能,首先我们要在项目路径处创建一个文本文件:
假设我们原先通讯录上存有信息,我们首先要读取内容,下面是读取文件信息的代码:
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等元素
这是加入后文件的信息,说明添加成功了。
最后我们开一眼文本储存的数据: 为什么会这样呢??
原来啊,我们将数据采用二进制的方式存储,所以看到的就像乱码一样。
到这里我们便将一个简单的通讯录讲完了,我们既可以实现存储信息的功能,同时我们还可以将信息转化为文本文件,这样我们就可以实现一个“半永久”式的程序。
谢谢观看!!!