使用C++的inipp庫(kù)處理配置文件.ini的示例詳解
ini 文件簡(jiǎn)介
一個(gè)ini文件由多個(gè)節(jié)section組成,每個(gè)節(jié)由多個(gè)鍵值對(duì)組成。
[Database] Host = localhost Port = 3306 Username = myuser Password = mypassword [AppSettings] LogLevel = 2 MaxConnections = 10
inipp庫(kù)
使用第三方庫(kù)inipp來(lái)操作ini文件。
地址:https://github.com/mcmtroffaes/inipp
使用時(shí)需要將inipp.h頭文件包含,還需要包含文件處理的頭文件 fstream
使用例子
常用的兩個(gè)函數(shù):
ini.parse(is); 解析整個(gè)ini文件
inipp::get_value(ini.sections[“Database”],“Host”, host_value) 訪問(wèn)值
#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 << "經(jīng)過(guò)默認(rèn)部分和插值后的 INI 文件:" << std::endl; ini.generate(std::cout); std::cout << "訪問(wèn)值" << 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; }
輸出結(jié)果
補(bǔ)充
為什么 輸出的ini文件和原來(lái)的ini文件的節(jié)順序不一樣?
INI 文件的節(jié)(sections)在文件中的順序通常不受保留,因?yàn)镮NI文件格式并沒(méi)有規(guī)定節(jié)的順序。因此,當(dāng)你使用一些庫(kù)或工具讀取和寫入INI文件時(shí),它們可能會(huì)重新排列節(jié)的順序。
對(duì)于 inipp 庫(kù),它在內(nèi)部使用了 std::map 來(lái)存儲(chǔ)節(jié)和鍵值對(duì),而 std::map 是一個(gè)基于紅黑樹(shù)的有序容器。這意味著它會(huì)按照鍵的排序順序來(lái)存儲(chǔ)數(shù)據(jù),因此,在生成INI文件時(shí),節(jié)和鍵值對(duì)的順序可能與原始文件中的順序不同。
以上就是使用C++的inipp庫(kù)處理配置文件.ini的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C++ inipp庫(kù)處理文件.ini的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++中std::tuple和std::pair的實(shí)現(xiàn)
std::tuple和std::pair是兩種極具實(shí)用性的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了C++中std::tuple和std::pair的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討
本篇文章是對(duì)在c中使用ftruncate()前需要fflush(),使用后需要rewind()進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言函數(shù)指針與回調(diào)函數(shù)的實(shí)現(xiàn)
本文主要介紹了C語(yǔ)言函數(shù)指針與回調(diào)函數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問(wèn)題解決
C4996錯(cuò)誤的意思:是VS覺(jué)得strcpy這函數(shù)不安全,建議你使更安全的函數(shù),那么如何解決呢,本文主要介紹了vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問(wèn)題解決,感興趣的可以了解一下2024-01-01C語(yǔ)言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07約瑟夫經(jīng)典問(wèn)題擴(kuò)展成雙向約瑟夫問(wèn)題
今天小編就為大家分享一篇關(guān)于約瑟夫經(jīng)典問(wèn)題擴(kuò)展成雙向約瑟夫問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03