Ini解析 --iniparser

Posted 尚书左仆射

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ini解析 --iniparser相关的知识,希望对你有一定的参考价值。

Iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。Iniparser库的API可以对ini文件(配置文件)进行解析、设置、删除等操作。

下载iniparser:

Github: https://github.com/ndevilla/iniparser

主要代码都在src目录下:

其中dictionary.h里面声明了一些直接解析ini file的API,iniparser.h里面声明了一些提供用户操作的API。iniparser.h里面的API是对dictionary.h里面API的再次封装。

下载文件后解压,进入目录,执行make命令:

由上可见,make生成了libiniparser.a静态库和libiniparser.so.1动态库。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,使用这两个目录中的库时不需要进行设置搜索路径即可直接使用,所以可以把这两个库文件直接拷贝到对应的目录下。

一个简单的配置文件示例:

[info]
name=home
mail=123@126.com

[setting]
ip=127.0.0.1
port=8080
indx=home.html
time=20190906

使用方法

将两个生成的库文件libiniparser.a和libiniparser.so.1拷贝到对应的代码目录下或者系统默认的库搜索路径下;将dictionary.h和iniparser.h拷贝到对应代码目录下;在测试代码文件中包含iniparser.h头文件。

代码操作示例:

void test_ini()

    const char* iniPath    = "settings/ini/info.ini";
    const char* changePath = "settings/ini/change.ini";

    dictionary *ini = NULL;
    ini = iniparser_load(iniPath);
    if ( ini == NULL ) 
        cout<<"stone:iniparser_load error!"<<endl;
        return;
    

    //get value form ini
    const char* info_name = iniparser_getstring(ini, "info:name", "null");
    const char* info_mail = iniparser_getstring(ini, "info:mail", "null");
    cout<<"In info section:"<<endl;
    cout<<"info_name:"<<info_name<<"|info_mail:"<<info_mail<<endl;

    int setting_port = iniparser_getint(ini, "setting:port", 0);
    cout<<"In setting section:"<<endl;
    cout<<"setting_port:"<<setting_port<<endl;

    //modify the value of port
    iniparser_set(ini, "setting:port", "8899");

    //to save value
    FILE *fp = NULL;
    fp = fopen(changePath, "w");
    if( fp == NULL ) 
        cout<<"fopen in error!"<<endl;
        goto done;
    

    // every section need to write to file
    iniparser_dumpsection_ini(ini, "info", fp);
    iniparser_dumpsection_ini(ini, "setting", fp);
    fclose(fp);

done:
    cout<<"now in done label!"<<endl;
    iniparser_freedict(ini);

上述代码对配置文件进行读取、修改和保存操作。Makefile中记得增加-liniparser编译参数。

执行结果:

执行后产生新文件change.ini,其中内容如下:

可见,setting配置段中port字段值已经成功修改了。

以上是关于Ini解析 --iniparser的主要内容,如果未能解决你的问题,请参考以下文章

Iniparser库详解

INI文件解析源码及使用简介

C/C++ 操作ini文件(SinpleIni 跨平台库)

自动化框架——PO设计模式自学——参数化配置——ini配置文件——简单读取配置文件

object-c 转换 C++

PHP解析ini文件支持多维数组解析