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++读取配置文件的资料请关注其它相关文章!

与其临渊羡鱼,不如退而结网。

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

相关文章:

你感兴趣的文章:

标签云: