C语言如何实现读取写入ini配置文件
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章给大家介绍C语言如何实现读取写入ini配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、了解什么是INI文件?ini 文件是Initialization File
千家信息网最后更新 2025年11月15日C语言如何实现读取写入ini配置文件
这篇文章给大家介绍C语言如何实现读取写入ini配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
一、了解什么是INI文件?
ini 文件是Initialization File的缩写,即初始化文件,这是用来配置应用软件以实现不同用户的要求。
二、INI文件的格式
INI文件由节、键、值组成。
一个简单的的INI文件例子如下:
[Setting]INIT_FLAG=0;VOLUME=1;LANGUAGE=1;
如上例子,[Setting]就是节,=号左边的值是键,=号右边的是值。
三、解析上述文件
/*ini.h*/#ifndef INI_H#define INI_H#include#include int GetIniKeyString(char *title,char *key,char *filename,char *buf);int PutIniKeyString(char *title,char *key,char *val,char *filename);#endif /*INI_H*/
/*ini.c*/#include#include /* * 函数名: GetIniKeyString * 入口参数: title * 配置文件中一组数据的标识 * key * 这组数据中要读出的值的标识 * filename * 要读取的文件路径 * 返回值: 找到需要查的值则返回正确结果 0 * 否则返回-1 */ int GetIniKeyString(char *title,char *key,char *filename,char *buf) { FILE *fp; int flag = 0; char sTitle[64], *wTmp; char sLine[1024]; sprintf(sTitle, "[%s]", title); if(NULL == (fp = fopen(filename, "r"))) { perror("fopen"); return -1; } while (NULL != fgets(sLine, 1024, fp)) { // 这是注释行 if (0 == strncmp("//", sLine, 2)) continue; if ('#' == sLine[0]) continue; wTmp = strchr(sLine, '='); if ((NULL != wTmp) && (1 == flag)) { if (0 == strncmp(key, sLine, strlen(key))) { // 长度依文件读取的为准 sLine[strlen(sLine) - 1] = '\0'; fclose(fp); while(*(wTmp + 1) == ' '){ wTmp++; } strcpy(buf,wTmp + 1); return 0; } } else { if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { // 长度依文件读取的为准 flag = 1; // 找到标题位置 } } } fclose(fp); return -1; } /* * 函数名: PutIniKeyString * 入口参数: title * 配置文件中一组数据的标识 * key * 这组数据中要读出的值的标识 * val * 更改后的值 * filename * 要读取的文件路径 * 返回值: 成功返回 0 * 否则返回 -1 */ int PutIniKeyString(char *title,char *key,char *val,char *filename) { FILE *fpr, *fpw; int flag = 0; char sLine[1024], sTitle[32], *wTmp; sprintf(sTitle, "[%s]", title); if (NULL == (fpr = fopen(filename, "r"))) return -1;// 读取原文件 sprintf(sLine, "%s.tmp", filename); if (NULL == (fpw = fopen(sLine, "w"))) return -1;// 写入临时文件 while (NULL != fgets(sLine, 1024, fpr)) { if (2 != flag) { // 如果找到要修改的那一行,则不会执行内部的操作 wTmp = strchr(sLine, '='); if ((NULL != wTmp) && (1 == flag)) { if (0 == strncmp(key, sLine, strlen(key))) { // 长度依文件读取的为准 flag = 2;// 更改值,方便写入文件 sprintf(wTmp + 1, " %s\n", val); } } else { if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { // 长度依文件读取的为准 flag = 1; // 找到标题位置 } } } fputs(sLine, fpw); // 写入临时文件 } fclose(fpr); fclose(fpw); sprintf(sLine, "%s.tmp", filename); return rename(sLine, filename);// 将临时文件更新到原文件 }
上述两个函数是简单的解析函数,因为ini文件有很多种解析方式,根据不同的需求解析也不同
所以要进行修改
比如我的注释符号是 " ;",所以我需要修改
并且根据实际功能需求也可以进行进一步的封装
四、测试如下
ini样本文件
/*test.ini*/[city]beijing = hello-beijingshanghai = hello-shanghai#information[study]highschool = xxxxuniversity = yyyy
test.c程序
/*test.c*/#include "ini.h"#includeint main(int argc, char const *argv[]){ char buff[100]; int ret; ret = GetIniKeyString("city","beijing","./test.ini",buff); printf("ret:%d,%s\n",ret,buff); ret = GetIniKeyString("study","highschool","./test.ini",buff); printf("ret:%d,%s\n",ret,buff); ret = PutIniKeyString("study","highschool","zzzz","./test.ini"); printf("put ret:%d\n",ret); ret = GetIniKeyString("study","highschool","./test.ini",buff); printf("ret:%d,%s\n",ret,buff); return 0;}
结果如下:
ret:0,hello-beijing
ret:0,xxxx
put ret:0
ret:0,zzzz
相应的test.ini的study段highschool项变成了zzzz.
这里还要注意,section使用中文字符可能会无法识别!
关于C语言如何实现读取写入ini配置文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
文件
配置
函数
数据
标识
长度
不同
语言
位置
例子
入口
内容
参数
更多
标题
注释
结果
路径
这是
需求
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大学网络安全方向面试知识
英雄传说网络技术
软件开发怎么报价每人天
没有管理员的我的世界服务器
php导出整个数据库备份
qt 数据库 例子
名字服务器
计算网络安全手抄报
万方数据库职称评审
php 连数据库安全吗
中国服务器 日语
云支付软件开发商加盟
广州天祝网络技术
我的世界电脑连接服务器无效会话
欣兴电子mes软件开发商
以id为标识合并数据库
软件开发设计工资待遇
aspx 绑定 数据库
drop数据库语法
erp数据库笔试
浩云科技有网络安全概念吗
数据库数据查询实验过程
wcf 实时采集数据库
怎么用c数据库
百度seo快排软件开发
靠谱软件开发报价
铜川软件开发成交价
网络技术学校什么时候开学
网络安全实例小学生
东南大学 网络安全考研