本文章介绍了如何使用C语言编程来读取和修改INI格式的配置文件的方法与技巧,适用于需要对程序设置进行外部管理的情况。
在使用C/C++读写INI配置文件的过程中,很多第三方开源库如iniparser、libini、rwini以及UltraLightINIParser虽然提供了部分功能,但往往存在代码冗余较大、接口不够友好等问题,并且它们在处理大小写敏感性、前后空白字符和各种注释符号等方面表现不佳。因此,在这里分享一个由我精心设计的纯C编写的INI读写程序源码,旨在提供一种更为简洁实用的选择。
该库支持Windows与Linux操作系统环境下的使用需求,主要特色如下:
1. 支持`;` 和 `#` 两种注释符号,并允许行尾添加注释。
2. 能够处理带引号的字符串(包括包含其他类型的引号或特殊字符的情况),并且在提取时自动去除双引号。
3. 允许存在无名称或者空名的section定义。
4. 支持十进制、十六进制和八进制数值表示,其中以`0x`开头为十六进制数,以单个零(0)开头则视为八进制数字。
5. section标题或键值对中的等号前后可以包含空格字符而不影响解析结果。
6. 具备跨平台换行符兼容性(例如`\n`, `\r\n` 或者其他组合形式的换行方式)。
7. 在读取和写入时忽略大小写的差异,但在新键值对添加或修改操作中保留用户提供的原始字符串格式。
8. 当向文件中新添数据时,默认行为是在已有section内最后一个有效条目的后面追加;如果不存在对应的section,则直接在文档结尾处创建新的部分并插入信息。
9. 提供了删除特定key及其相关联的所有注释的功能,实现精确的数据项移除操作。
10. 在解析过程中能够自动忽略格式错误的行,并保持这些无效数据原样不变以便于后续调试或修正工作。
11. 对已存在的键值对进行修改时保留原有的备注信息(包括整行形式和位于末尾位置处的小注释)及空白间隔字符,从而尽量维持文件的整体布局风格一致性。
不足之处在于:
- 不支持单个key对应多个value的列表格式;
- 禁止定义重复名称的section或键值对;
使用该库时仅需引入两个核心头文件`inirw.h`和实现代码段`inirw.c`, 并附带有帮助测试功能正确性的示例程序及项目配置文件。