Boost.PropertyTree讀取ini文件(Linux環境)


    昨天因為需要讀取配置文件略略傷神。網上很多例子但是我用都會報錯,很多人把Boost.PropertyTree的函數寫很麻煩的包所以報錯我也不知道什么問題,所以今天整理下。

    頭上附上官網鏈接:Boost C++庫 因為別人的代碼再用的順手都是別人的思路,有不明白還是官網最好理解

然后分享和分析下我的代碼:

  #include <boost/property_tree/ptree.hpp>  
#include <boost/property_tree/ini_parser.hpp>
//定義初始化
boost::property_tree::ptree m_pt, tag_setting; read_ini(
"/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt); tag_setting = m_pt.get_child(tagname); int x = tag_setting.get<int>("pos_x",20); int y = tag_setting.get<int>("pos_y",20); std::cout << x << y<<std::endl;

    首先,boost::property_tree::ptree m_pt, tag_setting;創建對象,這句話放在初始化聲明里。

    然后,read_ini("/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt);讀取你要讀取的路徑和文件名,m_pt是將要讀取這個文件的對象。看到別人博客里面有給read_ini前面加包名這樣寫的boost::property_tree::ini_parser::read_ini(ini_file, m_pt);我開始直接粘過去編譯一直通不過,后來去掉就可以了不知為何。

    這句,tag_setting = m_pt.get_child(tagname);因為ini文件是分很多section的,tagname就是【】中的名字,告訴系統是讀取這一塊。注意,tag_setting這時候讀到的是ini的一塊內容。

    接着,int x  = tag_setting.get<int>("pos_x",20);
              int y  = tag_setting.get<int>("pos_y",20);這兩句就是讀取tagname塊中的具體值啦,參數pos_x是ini文件的變量名,后面的20是如果在配置文件中沒有找到這個變量則默認20這個值。

    最后,讀取就可以啦std::cout <<  x  <<  y<<std::endl;

根據官網的意思,似乎讀xml和Json也是一樣的,但是函數和頭文件名里的ini就好相應的改變啦。

對了,最后附上我的ini:

[e2004000780c002212709894]
pos_x = 30
pos_y = 40

[e2004000780c00221450823d]
pos_x = 50
pos_y = 20

[aaaabbbb3333444412410000]
pos_x = 01
pos_y = 90

 /*------------------------------------------------------------------------可愛的分割線---------------------------------------------------------------------------*/

剛剛加了寫入功能代碼+講解:

tag_setting.clear(); //不清除的話新的標簽默認會繼承上一個標簽中的內容
tag_setting.put<int>("pos_x",666); m_pt.put_child(tagname,tag_setting); //寫入新的標簽,如果標簽名一樣,會修改你前一個的內容,如果不一樣就會在下面新加一個 write_ini("/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt);

第一句tag_setting.put<int>("pos_x",666);改變pos_x變量的值。

后一句,如果名字跟前面的一樣,會改變前面的值,否則會新生成一個。

下面兩個不解釋了,試了下add_child,有問題。

另附鏈接:boost函數庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM