Я хочу прочитать данные json из файла на С++, используя библиотеки boost. Использование дерева свойств. Я новичок в программировании, очень новичок в С++ и впервые использую библиотеку boost. У меня была некоторая история в C много лет назад. И у меня есть недельный опыт работы с C++ с использованием библиотеки SFML.
Ниже мой код шаблона загружает файл, считывает данные и в случае сбоя выдает ошибку. Я хочу немного изменить обработку ошибок. 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 часов, но я не мог найти ничего, что я хотел. (Или, по крайней мере, я не заметил) И у меня недостаточно опыта, чтобы декодировать оригинальную библиотечную документацию. Они кажутся мне зашифрованными, поэтому вместо этого я ищу образцы.
ptree_bad_path
исключение. Вы должны были найти его довольно быстро, если бы прочитать справочную документацию. - person Some programmer dude   schedule 09.02.2017try { boost::property_tree::read_json("./data.json", pt); } catch (const boost::property_tree::ptree_bad_path& e1) { std::cout << "I didnt create the file yet"; } catch (const std::exception& e2) { std::cout << e2.what() << std::endl; }
Все равно выдавал исходную ошибку. Как мне это реализовать? - person Kaan Kara   schedule 09.02.2017json_parser_error
с этой информацией: путь и строка не могут открыть файл. Так вот что вам нужно проверить. - person Some programmer dude   schedule 09.02.2017