使用C++的inipp庫處理配置文件.ini的示例詳解
ini 文件簡介
一個ini文件由多個節(jié)section組成,每個節(jié)由多個鍵值對組成。
[Database] Host = localhost Port = 3306 Username = myuser Password = mypassword [AppSettings] LogLevel = 2 MaxConnections = 10
inipp庫
使用第三方庫inipp來操作ini文件。
地址:https://github.com/mcmtroffaes/inipp
使用時需要將inipp.h頭文件包含,還需要包含文件處理的頭文件 fstream
使用例子
常用的兩個函數:
ini.parse(is); 解析整個ini文件
inipp::get_value(ini.sections[“Database”],“Host”, host_value) 訪問值
#include "inipp.h" #include <fstream> #include <string> int main() { inipp::Ini<char> ini; std::ifstream is("config.ini"); if (!is) { std::cerr << "error: open config.ini failed" << std::endl; return 1; } ini.parse(is); std::cout << "原始 INI 文件" << std::endl; ini.generate(std::cout); ini.strip_trailing_comments(); ini.default_section(ini.sections["DEFAULT"]); ini.interpolate(); std::cout << "經過默認部分和插值后的 INI 文件:" << std::endl; ini.generate(std::cout); std::cout << "訪問值" << std::endl; std::string host_value; if(inipp::get_value(ini.sections["Database"],"Host", host_value)) { std::cout << "Host = " << host_value << std::endl; }else { std::cout << "host = " << "not found" << std::endl; }; return 0; }
輸出結果
補充
為什么 輸出的ini文件和原來的ini文件的節(jié)順序不一樣?
INI 文件的節(jié)(sections)在文件中的順序通常不受保留,因為INI文件格式并沒有規(guī)定節(jié)的順序。因此,當你使用一些庫或工具讀取和寫入INI文件時,它們可能會重新排列節(jié)的順序。
對于 inipp 庫,它在內部使用了 std::map 來存儲節(jié)和鍵值對,而 std::map 是一個基于紅黑樹的有序容器。這意味著它會按照鍵的排序順序來存儲數據,因此,在生成INI文件時,節(jié)和鍵值對的順序可能與原始文件中的順序不同。
以上就是使用C++的inipp庫處理配置文件.ini的示例詳解的詳細內容,更多關于C++ inipp庫處理文件.ini的資料請關注腳本之家其它相關文章!
相關文章
基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討
本篇文章是對在c中使用ftruncate()前需要fflush(),使用后需要rewind()進行了詳細的分析介紹,需要的朋友參考下2013-05-05