时间:2021-05-20
代码地址
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 ){ 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++读取配置文件的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了C#操作INI配置文件示例的具体代码,供大家参考,具体内容如下源文件地址:C#操作INI配置文件示例创建如图所示的控件:源代码:usingS
C读取ini文件前言:在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内
本文实例讲述了C#自定读取配置文件类。分享给大家供大家参考。具体如下:这个C#类定义了读取AppSettings的配置文件的常用方法,通过这个类可以很容易从Ap
大家在编写C#控制台程序的时候肯定讲过config配置文件,有时候在程序中我们需要读取配置文件中的一些选项。那么在C#中怎么读取那?下面小编给大家分享C#如何获
SpringBoot读取配置文件1)通过注入ApplicationContext或者Environment对象来读取配置文件里的配置信息。packagecom.