2

我想使用 boost 库从 C++ 文件中读取 json 数据。使用属性树。我是编程新手,对 C++ 非常陌生,这是我第一次使用 boost 库。多年前,我在 C 中有一些历史。我在使用 SFML 库的 C++ 方面有一周的经验。

下面是我的模板代码加载文件,读取数据,如果失败给出错误。我想改变我的错误处理方式有点不同。1. 如果我无法打开提到的文件,因为它不存在,我想创建一个相应命名的空白文件。2. 但是,如果发生其他错误但文件存在,我不想意外删除文件并创建新文件(擦除数据)。

我想它会是这样的

catch (const std::exception& e)
{
 if (e.type == std::exception::filenotfound()) //whatever function i need
   {
    boost::property_tree::write_json("./data.json", pt);
   }
 else
   {
    std::cout << e.what() << std::endl;
   }
}

因此,我只想在文件真正不存在的情况下创建该文件,但如果我要查找的数据以某种方式损坏、丢失或发生一些无法想象的其他错误,我不想删除它。这是我的模板(没有实现我想要的)

#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
int main()
{
    boost::property_tree::ptree pt;
    try
    {
        boost::property_tree::read_json("./data.json", pt);
    }
    catch (const std::exception& e)
    {
     std::cout << e.what() << std::endl;
    }
    std::cout << pt.get<std::string>("test_name","default") << std::endl;

    return 0;

}

我应该如何编写这段代码。我在互联网上搜索了 2 个小时,但找不到任何我想要的东西。(或者至少我没有注意到)而且我没有足够的经验来解码原始库文档。它们对我来说就像是加密的,所以我寻找样本。

4

1 回答 1

2

https://stackoverflow.com/users/440558/some-programmer-dude回答了我的问题。这是确切的编码:

try
{
     // Trying to load the file
}
catch (const boost::property_tree::json_parser_error& e1)
{
    //Here what i do if i cant find the file
}

如果文件不存在,它会做一些事情。但是如果文件存在,但如果它的格式错误或没有适当的数据,它不会做任何事情。

于 2017-02-09T09:39:53.867 回答