C读取INI的代码实例

简介: C读取INI的代码实例

工作需要,网上找了一点代码,以此为基础做了修改。写的部分还没做,以后有机会再发布。


 从方便来看,最好是实现一个字典,把值放进字典中,访问起来特别方便。

/**
  允许section为空,此时搜索文件的全部。
 */
int gh_conf_read_value(const char* psFile, const char* psSection, const char* psKey, char* psValue)
{
    FILE* pFile = NULL;
    char lineContent[LINE_CONTENT_MAX_LEN];
    BOOL bFoundSection = BOOL_FALSE;
    BOOL bFoundKey     = BOOL_FALSE;
    char cHead         = 0;
    int  nLength       = 0;
    char *pHead        = NULL;
    if (psKey == NULL || psFile == NULL || psValue == NULL)
    {
        return -1;
    }
    pFile = fopen(psFile, "r");
    if (pFile == NULL)
    {
        GH_LOG_INFO("%s: Opent file %s failed.\n", __FILE__, psFile);
        return -1;
    }
    //找到sestion
    if (psSection != NULL)
    {
        while (feof(pFile) == 0)
        {
            memset(lineContent, 0, LINE_CONTENT_MAX_LEN);
            fgets(lineContent, LINE_CONTENT_MAX_LEN, pFile);
            cHead   = lineContent[0];
            //去空格
            if ((cHead == '#') || (cHead == '\0') || (cHead == '\r') || (cHead == '\n'))
            {
                continue;
            }
            //合法的section, 自动认为 lineContent[nLength-1-1] == ']'
            if (cHead == '[')
            {
                //[]之外,还有个\n
                nLength = strlen(lineContent)-3;
                if (!strncmp(lineContent+1, psSection, nLength))
                {
                    bFoundSection = BOOL_TRUE;
                    break;
                }
                continue;
            }
        }
        //没找到,直接返回吧。
        if (!bFoundSection)
        {
            fclose(pFile);
            return -1;
        }
    }
    //找KEY
    while (feof(pFile) == 0)
    {
        memset(lineContent, 0, LINE_CONTENT_MAX_LEN);
        fgets(lineContent, LINE_CONTENT_MAX_LEN, pFile);
        cHead = lineContent[0];
        if ((cHead == '#') || (cHead == '\0') || (cHead == '\r') || (cHead == '\n'))
        {
            continue;
        }
        //碰到新的节,要说明没找到。
        if (psSection != NULL && cHead == '[')
        {
            break;
        }
        //check key
        if (strncmp(lineContent, psKey, strlen(psKey)) == 0)
        {
            bFoundKey = BOOL_TRUE;
            break;
        }
    }
    //先关闭,后面省事。
    fclose(pFile);
    pFile = NULL;
    //没找到,直接返回吧。
    if (!bFoundKey)
    {
        return -1;
    }
    //切分值。从第一个等号开始,后面全部是值。
    pHead = strchr(lineContent, '=');
    if (pHead == NULL)
    {
        return -1;
    }
    //跳过=
    pHead++;
    nLength = strlen(pHead)-1;
    //最后一个是回车
    if (pHead[nLength] == '\n')
    {
        pHead[nLength] = 0;
    } 
    strcpy(psValue, pHead);
    return 0;
}
目录
相关文章
|
7月前
【QT】读写.ini配置文件的程序实现
【QT】读写.ini配置文件的程序实现
122 0
|
4月前
|
JSON 数据库 Nacos
[python]常用配置读取方法
[python]常用配置读取方法
|
7月前
|
Linux Shell 开发工具
C++ 的 ini 配置文件读写/注释库 inicpp 用法 [ header-file-only ]
这是一个C++库,名为inicpp,用于读写带有注释的INI配置文件,仅包含一个hpp头文件,无需编译,支持C++11及以上版本。该库提供简单的接口,使得操作INI文件变得容易。用户可通过`git clone`从GitHub或Gitee获取库,并通过包含`inicpp.hpp`来使用`inicpp::iniReader`类。示例代码展示了读取、写入配置项以及添加注释的功能,还提供了转换为字符串、双精度和整型的函数。项目遵循MIT许可证,示例代码可在Linux环境下编译运行。
540 0
|
7月前
|
存储 Go API
配置文件大揭秘:INI文件读写实战详解
配置文件大揭秘:INI文件读写实战详解
547 1
|
7月前
|
Python
python对 ini 文件的读取
python对 ini 文件的读取
|
存储 API Windows
QT读写.INI文件的实现方法
QT读写.INI文件的实现方法
233 0
|
存储 Java C语言
手把手教你实现类似ini4j的方式创建读取和修改.ini文件(支持section)
手把手教你实现类似ini4j的方式创建读取和修改.ini文件(支持section)
140 0
|
存储 API 数据格式
Qt通过QSttings类读取*.ini配置文件
Qt通过QSttings类读取*.ini配置文件
226 0
|
C语言 Windows
c语言直接读写ini配置文件
c语言直接读写ini配置文件
|
Python
Python读取ini配置文件
db_config.ini [baseconf] host=127.0.0.1 port=3306 user=root password=root db_name=evaluting_sys [concurrent] processor=20 ...
1330 0