2014-11-21 2 views
0

im пытается написать ini-файл, используя ini-парсер и дерево свойств boost библиотеки. Файл написан поэтапно - я имею в виду, что каждая функция записывает часть его. В конце я оставил только последний выход вместо того, чтобы все записано.C++ boost library - запись в файл ini без перезаписи?

Пример кода я использую при написании:

property_tree::ptree pt; 
string juncs=roadID; 
size_t pos = juncs.find_last_of("j"); 
string jstart = juncs.substr(0,pos); 
string jend = juncs.substr(pos,juncs.length()); 
pt.add(repID + ".startJunction", jstart); 
pt.add(repID + ".endJunction", jend); 
write_ini("Report.ini", pt); 

Как я могу использовать функцию write_ini без перезаписи остальной текст ??

ответ

0

Просто построить Ptree ступенчато, и писать только тогда, когда сделано:

Live On Coliru

#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/ini_parser.hpp> 

using namespace boost::property_tree; 

struct X { 
    void add_junction(std::string repID, ptree& pt) const { 
     std::string juncs = _roadID; 
     std::size_t pos = juncs.find_last_of("j"); 
     std::string jstart = juncs.substr(0,pos); 
     std::string jend = juncs.substr(pos,juncs.length()); 

     pt.add(repID + ".startJunction", jstart); 
     pt.add(repID + ".endJunction", jend); 
    } 

    std::string _roadID = "123890234,234898j340234,23495905"; 
}; 

int main() 
{ 
    ptree pt; 

    X program_data; 
    program_data.add_junction("AbbeyRoad", pt); 
    program_data.add_junction("Big Ben", pt); 
    program_data.add_junction("Trafalgar Square", pt); 

    write_ini("report.ini", pt); 
} 

Выход:

[AbbeyRoad] 
startJunction=123890234,234898 
endJunction=j340234,23495905 
[Big Ben] 
startJunction=123890234,234898 
endJunction=j340234,23495905 
[Trafalgar Square] 
startJunction=123890234,234898 
endJunction=j340234,23495905 
+0

Спасибо! приятное простое решение .. еще раз спасибо – vito