ini 配置文件使用方法

本博文由 youngpan1101 出品,转载请注明出处。
文章链接: http://blog.csdn.net/youngpan1101/article/details/73773296
作者: 宋洋鹏(youngpan1101)
邮箱: yangpeng_song@163.com


简介

  • 一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,为了让程序出厂后还能根据需要进行必要的配置,所以要用配置文件;
  • 配置文件有很多种,如 INI 配置文件,XML 配置文件,cfg 配置文件,还有就是可以使用系统注册表等;
  • INI 就是英文 “initialization” 的头三个字母的缩写;当然 INI file 的后缀名也不一定是 .ini 也可以是 .cfg,.conf 或者是 .txt。

运行 Demo

  1. 下载 inifile.cpp 和 inifile.h 文件,复制到工程目录下的 3rdParty/inifile 文件夹里 【Download

  2. CMakeLists.txt

    cmake_minimum_required(VERSION 2.8)
    project( Sample )
    
     # produce lib
    SET(IniFileParse_CPP  ${PROJECT_SOURCE_DIR}/3rdParty/inifile/inifile.cpp)
    ADD_LIBRARY(IniFileParse  SHARED  ${IniFileParse_CPP})
    
    include_directories( ${PROJECT_SOURCE_DIR}/3rdParty )
    
    add_executable( main main.cpp )
    
    TARGET_LINK_LIBRARIES( main  IniFileParse )
  3. main.cpp

     #include <iostream>
     #include <sstream>
    
     #include "inifile/inifile.h"
    
    //模板函数:将string类型变量转换为常用的数值类型(此方法具有普遍适用性)  
    template <class Type>  
    Type stringToNum(const std::string& str){  
        istringstream iss(str);  
        Type num;  
        iss >> num;  
        return num;      
    } 
    
    void getPara(const std::string& iniPath){
        std::cout << "load ini file to get parameters" << std::endl;
    
        inifile::IniFile ini;   
    
        int flag = ini.load(iniPath);
    
        int ret = 0;   // ret = 0 : succeed to get the parameter , otherwise -1 means fail
    
        int valTmp = ini.getIntValue("CameraID", "ID", ret);
        if(-1 == ret){
            std::cout << "can not get the CameraID from given ini file" << std::endl;
        }
        std::cout << "ret = " << ret << std::endl;
        std::cout << "valTmp = " << valTmp << std::endl;
    
        std::string strTmp = ini.getStringValue("Camera_Info", "SN", ret);
        if(-1 == ret){
            std::cout << "can not get the SN from given ini file" << std::endl;
        }
        std::cout << "ret = " << ret << std::endl;
        std::cout << "strTmp = " << strTmp << std::endl;
    
        double dValTmp = ini.getDoubleValue("Camera_Info", "image_width", ret);
        if(-1 == ret){
            std::cout << "can not get the image_width from given ini file" << std::endl;
        }
        std::cout << "ret = " << ret << std::endl;
        std::cout << "dValTmp = " << dValTmp << std::endl;
    
        // 2 x 4 Matrix 
        std::stringstream Matrix_1(ini.getStringValue("Camera_Info", "Matrix_row_1", ret));
        double num[4];
        for (int i = 0; i < 4; ++i)
        {
          std::string singleValueStr;
          getline(Matrix_1, singleValueStr, ',');
          num[i] = stringToNum<double>(singleValueStr);
        }
        std::cout << "num[0] = " << num[0] << " num[1] = " << num[1] << " num[2] = " << num[2] << " num[3] = " << num[3] << std::endl;
    
        std::stringstream Matrix_2(ini.getStringValue("Camera_Info", "Matrix_row_2", ret));
        for (int i = 0; i < 4; ++i)
        {
          std::string singleValueStr;
          getline(Matrix_2, singleValueStr, ',');
          num[i] = stringToNum<double>(singleValueStr);
        }
        std::cout << "num[0] = " << num[0] << " num[1] = " << num[1] << " num[2] = " << num[2] << " num[3] = " << num[3] << std::endl;
    }
    
    int main (int argc, char** argv){
        std::cout << "ini file parse..." << std::endl;
    
        std::string iniPath = "/home/hwj/Code/sample/para.ini";
    
        getPara(iniPath);
    
        return 1;
    }
  4. para.ini

    [CameraID]
    ID=3      ; the id of camera used to get video stream
    
    [Camera_Info]
    SN=HW_987654321    ; serial number of camera
    image_width=640
    Matrix_row_1=1,2.34,5.4,5.5  
    Matrix_row_2=11,12.34,15.4,15.5
  5. 编译运行

    $ cd build
    $ cmake ..
    $ make
    $ sudo ./main

Reference

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: INIInitial Input)配置文件是一种常用的配置文件格式,用于存储和读取程序的配置信息。以下是读写INI配置文件的步骤: 1. 读取INI配置文件:首先,我们需要打开INI配置文件,并逐行读取文件内容。可以使用适当的函数或库来实现文件读取操作。在读取过程中,我们需要解析每一行内容,并提取所需的配置信息。 2. 解析INI配置文件:在解析每一行配置信息之前,我们还需要进行一些校验和处理。首先,我们需要忽略注释行(行首以分号 “;” 或井号 “#” 开头的行),然后我们需要忽略空行。接下来,我们可以使用适当的函数或算法来解析每一行的配置信息。一般来说,每一行配置信息的格式为“键=值”的形式,我们需要提取出键和对应的值。 3. 存储INI配置文件:如果需要修改INI配置文件或添加新的配置项,我们需要打开INI配置文件,并写入新的配置信息。首先,我们需要读取原有的配置信息,并将其保存到内存中。然后,我们可以使用合适的函数或库来修改配置信息或添加新的配置项。最后,我们将修改后的配置信息写入INI配置文件。 4. 错误处理:在读写INI配置文件的过程中,如果遇到错误,例如文件不存在、文件权限不足、文件格式错误等,我们需要进行适当的错误处理。可以根据实际情况输出错误信息或进行其他操作。 总结:读写INI配置文件是一种常见的配置文件操作方法,需要按照一定的步骤进行。通过逐行读取和解析配置文件内容,可以实现读取INI配置文件的功能。通过修改和添加配置信息,并将其写入配置文件,可以实现存储INI配置文件的功能。在进行读写操作时,还需要注意错误处理,以保证程序的稳定性和可靠性。 ### 回答2: INI配置文件是一种常见的配置文件格式,用于存储程序的配置信息。C语言提供了一些函数库用于读写INI文件,包括<Windows.h>头文件中的GetPrivateProfileString、GetPrivateProfileInt、WritePrivateProfileString等函数。 首先,要读取INI配置文件中的值,可以使用GetPrivateProfileString函数。该函数的参数包括INI文件的路径、节名和键名,同时可以传入一个缓冲区,函数将根据配置文件中的键值将对应的值复制到缓冲区中。 另外,如果配置文件中的值是整数类型的,可以使用GetPrivateProfileInt函数,该函数会直接返回键值对应的整数值。 如果需要写入INI配置文件,可以使用WritePrivateProfileString函数。该函数的参数包括INI文件的路径、节名、键名和值。调用该函数后,程序会将键值对按照指定的格式写入配置文件中。 在使用这些函数前,需要先加载Windows.h头文件。同时,在使用INI配置文件时,需要注意配置文件的路径是否正确,以及节名和键名是否正确。读取INI文件时,还要判断读取的值是否为空,以避免出现错误。 总结起来,C语言提供了一些函数用于读写INI配置文件,这些函数可以方便地读取和写入配置信息。通过合理的使用这些函数,可以更好地管理程序的配置,提升程序的可配置性和可维护性。 ### 回答3: INIInitialization)是一种常见的配置文件格式,用于存储应用程序的设置和参数。在C语言中,可以通过读写INI配置文件来实现配置文件的加载和保存。 在读取INI配置文件时,可以使用标准库函数fopen()来打开文件,然后通过fgets()函数逐行读取文件内容。读取到的每一行都可以通过字符串处理函数来分割成键值对。常用的字符串处理函数包括strtok()、strstr()和sscanf()等。使用时需要根据INI配置文件的具体格式和规范来进行相应的处理。 在写入INI配置文件时,可以使用标准库函数fopen()来创建或打开文件,然后使用fprintf()函数来向文件写入内容。需要注意的是,写入INI配置文件时需要按照一定的格式和规范来进行写入,以保证配置文件的正确性和可读性。 读写INI配置文件的步骤主要包括以下几个方面: 1. 打开INI配置文件使用fopen()函数打开INI配置文件。 2. 读取INI配置文件内容:使用fgets()函数逐行读取配置文件内容,并使用字符串处理函数处理每一行的内容。 3. 解析INI配置文件内容:根据INI配置文件的格式和规范,将每一行的内容解析成键值对,并存储到相应的数据结构中。 4. 关闭INI配置文件使用fclose()函数关闭INI配置文件,释放资源。 5. 根据需要进行数据操作:根据存储的键值对,进行相应的数据操作,如设置应用程序的参数、初始化等。 6. 写入INI配置文件使用fprintf()函数向INI配置文件写入数据,按照INI配置文件的格式和规范进行写入。 总结:通过使用C语言提供的标准库函数,可以实现INI配置文件的读取和写入。读取时需要逐行读取并解析每一行的内容,写入时需要按照INI配置文件的格式进行写入。读写INI配置文件是一种常见的配置文件处理方式,具有简单、灵活的优点,适用于各种应用程序的配置管理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值