2012-12-03 39 views
5

該文檔沒有真正說。如何檢測Boost.PropertyTree的解析/讀取失敗?

我知道我可以把它交給ifstream,所以我可以檢查以確保它是開放的,所以這種情況大多是處理的。

但是,當做boost :: property_tree :: ini_parser :: read_ini(ifstream_object,property_tree_object);

如何檢測文件是否格式不正確?有沒有什麼辦法讓我獲得診斷信息,如,其中的解析失敗?

回答

9

只是發現異常。基本PropertyTree異常類是boost::property_tree::ptree_error,它來自std::runtime_error,它有兩個後代:ptree_bad_dataptree_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