C++读取配置文件的示例代码
作者: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++读取配置文件的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:
- 最新VScode C/C++ 环境配置的详细教程
- vs code 配置c/c++环境的详细教程(推荐)
- Linux配置C++11编译环境的方法
- vscode 配置 C/C++编译环境(完整教程)
- VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h”或者检测到 #include 错误,请更新includePath)(POSIX API)
- C++读写ini配置文件实现过程详解
- Visual Studio Code配置C/C++开发环境的教程图解
- Visual Studio Code 配置C、C++环境/编译并运行的流程分析
- Ubuntu 20.04 下安装配置 VScode 的 C/C++ 开发环境(图文教程)
- Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境(教程详解)
- C++读写配置项的基本操作