代码地址
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#中读取App.config配置文件代码实例,包括了C#中读取App.config配置文件代码实例的使用技巧和注意事项,需要的朋友参考一下 App.config是C#开发WinForm程序的配置文件,开发Web程序的配置文件叫Web.config。本文介绍App.config的简介使用。 我们先来打开一个App.config文件,看看它的内容像什么样子。 从这段代码可以看出,App
本文向大家介绍C++读取INI配置文件类实例详解,包括了C++读取INI配置文件类实例详解的使用技巧和注意事项,需要的朋友参考一下 本文以实例讲解了C++读取配置文件的方法。 一般情况下,我们都喜欢使用ini扩展名的文件作为配置文件,可以读取及修改变量数值,也可以设置新的组,新的变量,本文的实例代码一个是读取INI的定义文件,另一个是CIniFile类实现文件,两者结合,完美实现VC++对INI文
本文向大家介绍.Net Core读取Json配置文件的实现示例,包括了.Net Core读取Json配置文件的实现示例的使用技巧和注意事项,需要的朋友参考一下 前言:在与传统的asp.net MVC项目相比,.net core项目在项目目录的文件结构上和功能上与前者都有很大的区别。例如:在.net core中使用Startup.cs取代Global.asax文件用于加载应用程序的配置和各种启动项。
本文向大家介绍java简单读取properties配置文件的方法示例,包括了java简单读取properties配置文件的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java简单读取properties配置文件的方法。分享给大家供大家参考,具体如下: 读取配置文件,小结如下 更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数
本文向大家介绍C++读写INI配置文件的类实例,包括了C++读写INI配置文件的类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++读写INI配置文件的类。分享给大家供大家参考。具体如下: 1. IniReader.h文件: 2. IniReader.cpp文件: 3. IniWriter.h文件: 4. IniWriter.cpp文件: 5. main.cpp文件: 希望本文所述
本文向大家介绍Java中spring读取配置文件的几种方法示例,包括了Java中spring读取配置文件的几种方法示例的使用技巧和注意事项,需要的朋友参考一下 Spring读取配置XML文件分三步: 一.新建一个Java Bean: 二.构建一个配置文件bean_config.xml: 三.读取配置文件: 1.利用ClassPathXmlApplicationContext: ClassPathX