C++读取配置文件的示例代码

 更新时间:2020年08月14日 08:37:50   作者:gongluck  
这篇文章主要介绍了C++读取配置文件的示例代码,帮助大家更好的理解和学习C++开发,感兴趣的朋友可以了解下

代码地址

https://github.com/gongluck/Code-snippet/tree/master/cpp/config

需求

开发中,读取配置文件信息必不可少。Windows平台有现成的API可用,也很方便。但是一旦项目迁移到Linux平台下,原先在Windows平台下的代码就全部作废。所以,实现一套跨平台的配置文件读取功能代码可以节省不少的劳动力。

实现

依赖于boost的ini_parser,可以实现跨平台读取ini格式的配置文件。

// config.h
/*
 * @Author: gongluck 
 * @Date: 2020-03-23 15:11:50 
 * @Last Modified by: gongluck
 * @Last Modified time: 2020-03-23 15:17:58
 */

// Profile read, dependent on boost

#pragma once

#include <iostream>
#include <vector>
#include <boost/property_tree/ptree.hpp>

namespace gconf
{
class config
{
public:
  int open(const char *configfile);
  template <typename T>
  int read(const char *session, const char *key, T &value, const char *configfile = nullptr)
  {
    if (configfile != nullptr && open(configfile) != 0)
    {
      return -1;
    }

    try
    {
      auto lvbtItems = lvptProperties_.get_child(session);
      value = lvbtItems.get<T>(key);
    }
    catch (std::exception &e)
    {
      std::cerr << __FILE__ << " : " << __LINE__ << " : " << e.what() << std::endl;
      return -1;
    }

    return 0;
  }
  int readall(const char *session,
        std::vector<std::pair<std::string, std::string>> &results,
        const char *configfile = nullptr);

private:
  boost::property_tree::ptree lvptProperties_;
};
} // namespace gconf
// config.cpp
/*
 * @Author: gongluck 
 * @Date: 2020-03-23 15:13:13 
 * @Last Modified by: gongluck
 * @Last Modified time: 2020-03-23 15:17:56
 */

#include "config.h"
#include <boost/property_tree/ini_parser.hpp>

namespace gconf
{
int config::open(const char *configfile)
{
  if (configfile == nullptr)
  {
    return -1;
  }

  try
  {
    boost::property_tree::ini_parser::read_ini(configfile, lvptProperties_);
  }
  catch (std::exception &e)
  {
    std::cerr << __FILE__ << " : " << __LINE__ << " : " << e.what() << std::endl;
    return -1;
  }

  return 0;
}

int config::readall(const char *session,
          std::vector<std::pair<std::string, std::string>> &results,
          const char *configfile /*= nullptr*/)
{
  if (configfile != nullptr && open(configfile) != 0)
  {
    std::cerr << __FILE__ << " : " << __LINE__ << " : "
         << " can not open " << configfile << std::endl;
    return -1;
  }

  try
  {
    auto lvbtItems = lvptProperties_.get_child(session);
    for (const auto &i : lvbtItems)
    {
      results.push_back(std::make_pair(i.first.data(), i.second.data()));
    }
  }
  catch (std::exception &e)
  {
    std::cerr << __FILE__ << " : " << __LINE__ << " : " << e.what() << std::endl;
    return -1;
  }

  return 0;
}
} // namespace gconf
// testcode
#include <iostream>

#include "../config/config.h"

#define CHECKRET(ret)\
if(ret != 0)\
{\
  std::cin.get();\
  return ret;\
}

int main()
{
  gconf::config conf;
  auto ret = conf.open("./config.ini");
  CHECKRET(ret);
  int file = 0;
  ret = conf.read<int>("log", "file", file);
  CHECKRET(ret);
  std::vector<std::pair<std::string, std::string>>kvs;
  ret = conf.readall("log", kvs);
  CHECKRET(ret);
  return 0;
}

以上就是C++读取配置文件的示例代码的详细内容,更多关于C++读取配置文件的资料请关注脚本之家其它相关文章!

相关文章

  • QT实现QML侧边导航栏的最简方法

    QT实现QML侧边导航栏的最简方法

    本文主要介绍了QT实现QML侧边导航栏的最简方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C++人工模拟栈实现方法

    C++人工模拟栈实现方法

    在本篇内容里小编为大家整理了关于C++人工模拟栈实现方法和步骤,需要的朋友们可以学习下。
    2018-12-12
  • C++带有指针成员的类处理方式详解

    C++带有指针成员的类处理方式详解

    这篇文章主要为大家详细介绍了C++带有指针成员的类处理方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 详解C++的JSON静态链接库JsonCpp的使用方法

    详解C++的JSON静态链接库JsonCpp的使用方法

    这篇文章主要介绍了C++的JSON静态链接库JsonCpp的使用方法,演示了使用JsonCpp生成和解析JSON的方法,以及C++通过JSON方式的socket通信示例,需要的朋友可以参考下
    2016-03-03
  • C++ this指针和空指针的具体使用

    C++ this指针和空指针的具体使用

    这篇文章主要介绍了C++ this指针和空指针的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C语言实现三子棋游戏的示例代码

    C语言实现三子棋游戏的示例代码

    今天我们将会用C语言实现三子棋。所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜。话不多说,我们开始吧
    2022-10-10
  • C++ OpenCV实现白平衡之完美反射算法

    C++ OpenCV实现白平衡之完美反射算法

    完美反射算法是白平衡各种算法中较常见的一种,比灰度世界算法更优。本文将利用C++和OpenCV实现白平衡中的完美反射算法,需要的可以参考一下
    2022-05-05
  • 用VC++6.0实现石头剪刀布游戏的程序

    用VC++6.0实现石头剪刀布游戏的程序

    最先看到这个游戏代码是python版的,后来看到有小伙伴用VC++重写了一遍,运行之后发现有些小bug,便尝试这修复了一下,并增加了些小功能,这里分享给大家。
    2015-03-03
  • 怎么通过C语言自动生成MAC地址

    怎么通过C语言自动生成MAC地址

    以下是对使用C语言自动生成MAC地址的实现代码进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • C++发送邮件实现代码

    C++发送邮件实现代码

    这篇文章主要为大家详细介绍了C++发送邮件的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论