【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
【摘要】
文章目录
一、追加键值对数据二、更新键值对数据三、完整代码示例
一、追加键值对数据
在上一篇博客 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 |...
一、追加键值对数据
在上一篇博客 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 ) 中 , 介绍了 逐行 遍历查询 文本文件中的键值对信息 ;
如果没有查找到 Key 关键字 , 则说明原来的配置文件中 , 没有改键值对信息 ;
此处将最新的键值对信息 追加进去即可 ;
使用 fprintf
函数 , 向文件中 , 追加新的键值对信息 ;
// 如果 Key 关键字不存在 , 直接将数据追加到文件末尾即可
if (key_exist == 0)
{
fprintf(fp, "%s = %s\n", key, value);
}
- 1
- 2
- 3
- 4
- 5
二、更新键值对数据
如果 Key 关键字存在 , 则需要重新写出该文件的数据 , 原来的数据直接删除覆盖 ;
这里的 更新键值对数据 , 是直接删除原来文件的所有信息 , 重新写入完整的文件信息 ;
首先 , 关闭之前的文件 ;
// 先关闭之前的 文件指针
if (fp != NULL)
{
fclose(fp);
fp = NULL;
}
- 1
- 2
- 3
- 4
- 5
- 6
然后 , 重新打开文件 ;
// 重新打开文件
fp = fopen(filename, "w+t");
if (fp == NULL)
{
ret = -4;
printf("fopen() err. \n");
goto End;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
最后 , 将文件的完整数据 , 写出到 文件 中 ;
// 将文件的完整数据 , 写出到 fp 中
// 注意此处的文件数据 , 没有原来的 键值对数据
// 写入了要更新的键值对数据
fputs(file_buffer, fp);
// 也可以使用 fwrite 函数 , 向文件中写出数据
//fwrite(filebuf, sizeof(char), strlen(filebuf), fp);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
代码示例 :
else // 如果 Key 关键字存在 , 则需要重新写出该文件的数据 , 原来的数据直接删除覆盖
{
// 先关闭之前的 文件指针
if (fp != NULL)
{
fclose(fp);
fp = NULL;
}
// 重新打开文件
fp = fopen(filename, "w+t");
if (fp == NULL)
{
ret = -4;
printf("fopen() err. \n");
goto End;
}
// 将文件的完整数据 , 写出到 fp 中
// 注意此处的文件数据 , 没有原来的 键值对数据
// 写入了要更新的键值对数据
fputs(file_buffer, fp);
// 也可以使用 fwrite 函数 , 向文件中写出数据
//fwrite(filebuf, sizeof(char), strlen(filebuf), fp);
}
- 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
三、完整代码示例
完整代码示例 :
// 如果 Key 关键字不存在 , 直接将数据追加到文件末尾即可
if (key_exist == 0)
{
fprintf(fp, "%s = %s\n", key, value);
}
else // 如果 Key 关键字存在 , 则需要重新写出该文件的数据 , 原来的数据直接删除覆盖
{
// 先关闭之前的 文件指针
if (fp != NULL)
{
fclose(fp);
fp = NULL;
}
// 重新打开文件
fp = fopen(filename, "w+t");
if (fp == NULL)
{
ret = -4;
printf("fopen() err. \n");
goto End;
}
// 将文件的完整数据 , 写出到 fp 中
// 注意此处的文件数据 , 没有原来的 键值对数据
// 写入了要更新的键值对数据
fputs(file_buffer, fp);
// 也可以使用 fwrite 函数 , 向文件中写出数据
//fwrite(filebuf, sizeof(char), strlen(filebuf), fp);
}
- 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
- 27
- 28
- 29
- 30
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/121723612
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)