2012-12-03 12 views
5

La documentazione non dice veramente.Come rilevare un errore di analisi/lettura di Boost.PropertyTree?

Ho capito che posso consegnarlo a ifstream, così ho potuto verificare che fosse aperto, in modo che il caso venisse per lo più trattato.

Ma quando si esegue boost :: property_tree :: ini_parser :: read_ini (ifstream_object, property_tree_object);

Come rilevare se il file era in un formato non valido? C'è un modo per me di ottenere informazioni diagnostiche, ad esempio in cui l'analisi non è riuscita?

risposta

9

Basta prendere le eccezioni. Classe di eccezione Base PropertyTree è boost::property_tree::ptree_error che deriva da std::runtime_error e ha due discendenti: ptree_bad_data e ptree_bad_path.

Esempio:

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

int main() 
{ 
    using namespace std; 
    using namespace boost; 
    using namespace property_tree; 

    stringstream ss; 
    ss << "good = value" << endl; 
    ss << "bad something" << endl; 
    try 
    { 
     ptree root; 
     read_ini(ss, root); 
    } 
    catch(const ptree_error &e) 
    { 
     cout << e.what() << endl; 
    } 
} 

uscita è:

<unspecified file>(2): '=' character not found in line 
Problemi correlati