ini 配置文件使用方法

来源:互联网 发布:tomcat 域名绑定 端口 编辑:程序博客网 时间:2024/06/04 23:34

本博文由 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 libSET(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 cameraimage_width=640Matrix_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

  • ini 配置文件格式
原创粉丝点击