From c5028e7a82d699364e795a27d87a7ac1f50be343 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Fri, 4 Jun 2021 15:46:00 +0200 Subject: [PATCH] catching exceptions related to fs::create_directories --- .../armem/core/diskmemory/EntityInstance.cpp | 12 ++++++++- .../armem/core/diskmemory/EntitySnapshot.cpp | 20 ++++++++++++-- .../armem/core/diskmemory/ProviderSegment.cpp | 27 +++++++++++++++++-- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp index 49bfe419d..9b6d3f8a1 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp +++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp @@ -4,6 +4,7 @@ #include <fstream> #include "../../core/error.h" +#include "ArmarXCore/core/exceptions/LocalException.h" #include <ArmarXCore/core/exceptions/local/ExpressionException.h> #include <RobotAPI/libraries/aron/core/io/dataIO/converter/Converter.h> @@ -103,7 +104,16 @@ namespace armarx::armem::d_ltm void EntityInstance::setTo(const wm::EntityInstance& m) { std::filesystem::path p = _fullPath(); - std::filesystem::create_directories(p); + + try + { + std::filesystem::create_directories(p); + } + catch (...) + { + ARMARX_WARNING << GetHandledExceptionString(); + return; + } std::filesystem::path d = p / (std::string(DATA_FILENAME) + ".json"); diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.cpp b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.cpp index 199e4f2c9..cc1124ab2 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.cpp +++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.cpp @@ -69,7 +69,15 @@ namespace armarx::armem::d_ltm void EntitySnapshot::setTo(const wm::EntitySnapshot& m) { - std::filesystem::create_directories(_fullPath()); + try + { + std::filesystem::create_directories(_fullPath()); + } + catch (...) + { + ARMARX_WARNING << GetHandledExceptionString(); + return; + } // We remove the contente here and reset it with new values _container.clear(); @@ -77,7 +85,15 @@ namespace armarx::armem::d_ltm int i = 0; for (const auto& s : m.instances()) { - std::filesystem::create_directory(_fullPath() / std::to_string(i)); + try + { + std::filesystem::create_directory(_fullPath() / std::to_string(i)); + } + catch (...) + { + ARMARX_WARNING << GetHandledExceptionString(); + continue;; + } auto wms = _container.emplace_back(id().withInstanceIndex(i++)); wms.path = path; diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.cpp index 2d5ed3d4a..77d38171c 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.cpp +++ b/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.cpp @@ -81,7 +81,18 @@ namespace armarx::armem::d_ltm void ProviderSegment::append(const wm::ProviderSegment& m) { - std::filesystem::create_directories(_fullPath()); + + try + { + std::filesystem::create_directories(_fullPath()); + + } + catch (...) + { + ARMARX_WARNING << GetHandledExceptionString(); + return; + } + TypeIO::writeAronType(_aronType, _fullPath()); for (const auto& [k, s] : m.container()) @@ -92,7 +103,19 @@ namespace armarx::armem::d_ltm } else { - std::filesystem::create_directory(_fullPath() / k); + + try + { + std::filesystem::create_directory(_fullPath() / k); + continue; + + } + catch (...) + { + ARMARX_WARNING << GetHandledExceptionString(); + return; + } + auto wms = _container.emplace(std::make_pair(k, id().withEntityName(k))); wms.first->second.path = path; wms.first->second.append(s); -- GitLab