Как обнаружить сбой разбора / чтения Boost.PropertyTree?

в документации действительно не говорится.

Я понимаю, что могу передать его ifstream, чтобы я мог проверить, открыт ли он, так что это дело в основном рассматривается.

но при выполнении boost:: property_tree:: ini_parser:: read_ini(ifstream_object, property_tree_object);

Как определить, был ли файл в плохом формате? Есть ли способ получить диагностическую информацию, такую как здесь анализ не удался?

1 ответов


просто поймать исключение. Базовый класс исключений PropertyTree -boost::property_tree::ptree_error, который является производным от std::runtime_error, и имеет двух потомков:ptree_bad_data и ptree_bad_path.

пример:

#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;
    }
}

вывод:

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