C++讀取配置文件的示例代碼
代碼地址
https://github.com/gongluck/Code-snippet/tree/master/cpp/config
需求
開發(fā)中,讀取配置文件信息必不可少。Windows平臺有現(xiàn)成的API可用,也很方便。但是一旦項目遷移到Linux平臺下,原先在Windows平臺下的代碼就全部作廢。所以,實現(xiàn)一套跨平臺的配置文件讀取功能代碼可以節(jié)省不少的勞動力。
實現(xiàn)
依賴于boost的ini_parser,可以實現(xiàn)跨平臺讀取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++讀取配置文件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C++讀取配置文件的資料請關(guān)注腳本之家其它相關(guān)文章!
- 最新VScode C/C++ 環(huán)境配置的詳細(xì)教程
- vs code 配置c/c++環(huán)境的詳細(xì)教程(推薦)
- Linux配置C++11編譯環(huán)境的方法
- vscode 配置 C/C++編譯環(huán)境(完整教程)
- VS Code C/C++環(huán)境配置教程(無法打開源文件“xxxxxx.h”或者檢測到 #include 錯誤,請更新includePath)(POSIX API)
- C++讀寫ini配置文件實現(xiàn)過程詳解
- Visual Studio Code配置C/C++開發(fā)環(huán)境的教程圖解
- Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析
- Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開發(fā)環(huán)境(圖文教程)
- Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境(教程詳解)
- C++讀寫配置項的基本操作
相關(guān)文章
VC6.0實現(xiàn)讀取Excel數(shù)據(jù)的方法
這篇文章主要介紹了VC6.0實現(xiàn)讀取Excel數(shù)據(jù)的方法,非常實用的功能,需要的朋友可以參考下2014-07-07用Visual Studio2017寫C++靜態(tài)庫圖文詳解
這篇文章主要介紹了用Visual Studio2017寫C++靜態(tài)庫的圖文教程,需要的朋友可以參考下2017-04-04Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運(yùn)行C、C++的教程詳解(主要Windo
這篇文章主要介紹了Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運(yùn)行C、C++(主要Windows、簡要Linux),本文通過實例截圖給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03C++輸出上三角/下三角/菱形/楊輝三角形(實現(xiàn)代碼)
本篇文章是對C++中輸出上三角/下三角/菱形/楊輝三角形的示例代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07