C语言如何实现读取写入ini配置文件
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家介绍C语言如何实现读取写入ini配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、了解什么是INI文件?ini 文件是Initialization File
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
科技和互联网公司
科技互联网公司装修
互联网科技公司官网
银优互联网科技有限公司
奔汉互联网科技
镁科技互联网资讯平台
深圳互联网科技怎么样
互联网科技产品
中国互联网有什么科技含量
互联网企业和科技型企业
荆州市昕露互联网络科技有限公司
移动互联网科技公司
燊美集互联网科技有限公司
如何创新互联网科技
中天科技中国工业互联网
张召忠谈中国互联网科技
青岛互联网科技园
互联网企业和网络科技有限公司
高科技和互联网的现代国家
颐高云石互联网科技
互联网科技战争
易互联网科技有限公司
喔噻互联网科技
黑科技闪耀互联网之光
语蝶互联网科技有限公司
广州新华互联网科技学校电竞方面
广州富喜互联网络科技
风投北京互联网科技
盐城市攀科互联网科技有限公司
颐高云石互联网科技