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;
}
目录
相关文章
|
3月前
|
PHP
php怎么循环读取文件夹里的文件
`DirectoryIterator`类提供了一个接口来遍历文件系统目录。与 `glob`函数相比,使用 `DirectoryIterator`类可以获得更多文件属性信息,如文件大小、修改时间等,从而进行更复杂的文件处理操作。
39 0
|
6月前
|
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环境下编译运行。
431 0
|
6月前
|
Python
python对 ini 文件的读取
python对 ini 文件的读取
|
存储 Java C语言
手把手教你实现类似ini4j的方式创建读取和修改.ini文件(支持section)
手把手教你实现类似ini4j的方式创建读取和修改.ini文件(支持section)
125 0
|
存储 API 数据格式
Qt通过QSttings类读取*.ini配置文件
Qt通过QSttings类读取*.ini配置文件
212 0
php读取与写入文件(详解)
php读取与写入文件(详解)
146 0
php读取与写入文件(详解)
C读取INI的代码实例
C读取INI的代码实例
86 0
|
API
INI文件的写入与读取
INI文件的写入与读取  [节名]         '[]中的节名对应此API的第一参数 Name=内容      'Nmae对应此API的第二参数 API的第三参数是没有取到匹配内容时返回的字符串; API的第四参数是要返回的字符串; API的第五参数是字符串缓冲的长度,一般255; API的第六参数是INI文件的路径。
1407 0