1

부스트 라이브러리를 사용하여 C++의 파일에서 json 데이터를 읽으려고합니다. 속성 트리 사용. 나는 프로그래밍에 익숙하지 않고, C++에 처음 접했고, 라이브러리를 처음 사용했다. 몇 년 전 C에서 약간의 역사가있었습니다. 그리고 SFML 라이브러리를 사용하여 C++에서 몇 주간의 경험을했습니다.Boost Property 트리 라이브러리에서 사용자 정의 방법으로 파일을 찾을 수 없음 오류 (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 시간 동안 인터넷을 찾았다. 그러나 couldnt는 내가 원하는 무엇이라도 발견한다. (또는 적어도 나는 통지를하지 않았다.) 그리고 나는 원래의 도서관 문서를 해독하기에 충분한 경험이 없다. 그들은 나에게 암호화 된 느낌이 들기 때문에 대신 샘플을 찾는다.

+1

[ptree_bad_path' 예외] (http://www.boost.org/doc/libs/1_63_0/doc/html/boost/property_tree/ptree_bad_path.html)를 찾는 것처럼 보입니다. [참조 문서를 읽으십시오] (http://www.boost.org/doc/libs/1_63_0/doc/html/property_tree/reference.html)하면 꽤 빨리 찾을 수있었습니다. –

+0

고맙습니다. 하지만 어떤 이유로 나는 그것을 구현할 수 없었다. 다음과 같은 방법으로 테스트하는 시도 : \t 가'("./ data.json"태평양 표준시) \t { \t \t 부스트 :: property_tree :: read_json을 시도; \t} \t 캐치 (const를 부스트 :: property_tree :: ptree_bad_path 및 E1) \t { \t \t 표준 : : cout과 << "나는 아직 파일을 생성 didnt는"; \t} \t 캐치 (표준 : CONST 예외 및 E2) \t { \t 표준 : COUT << e2.what() << 표준 : ENDL; \t} ' 여전히 원래 오류가 발생했습니다. 어떻게 구현해야합니까? –

+0

그리고 "원래의 오류"는 * 무엇입니까? –

답변

1

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 
} 

파일이 존재하지 않으면 어떤 작업을 수행합니다. 그러나 파일이 존재하지만 형식이 잘못되었거나 제대로 된 데이터가 없다면 아무 것도하지 않습니다.