diff --git a/src/MaaCore/Utils/DebugImageHelper.hpp b/src/MaaCore/Utils/DebugImageHelper.hpp index 9f59ab035a..e4518898bc 100644 --- a/src/MaaCore/Utils/DebugImageHelper.hpp +++ b/src/MaaCore/Utils/DebugImageHelper.hpp @@ -81,6 +81,11 @@ inline bool save_debug_image( static std::mutex s_mutex; auto norm_dir = relative_dir.lexically_normal(); + const auto& base_dir = UserDir.get(); + auto res = std::mismatch(base_dir.begin(), base_dir.end(), norm_dir.begin()); + if (norm_dir.is_relative() && res.first != base_dir.end()) { + norm_dir = base_dir / norm_dir; + } if (auto_clean) { std::lock_guard lock(s_mutex); diff --git a/src/MaaCore/Utils/WorkingDir.hpp b/src/MaaCore/Utils/WorkingDir.hpp index 961a9739ad..773c503264 100644 --- a/src/MaaCore/Utils/WorkingDir.hpp +++ b/src/MaaCore/Utils/WorkingDir.hpp @@ -19,12 +19,13 @@ public: const std::filesystem::path& get() const noexcept { return dir_; } - bool set(std::filesystem::path dir) + bool set(const std::filesystem::path& dir) { - if (!std::filesystem::exists(dir) || !std::filesystem::is_directory(dir)) { + auto norm_dir = dir.lexically_normal(); + if (!std::filesystem::exists(norm_dir) || !std::filesystem::is_directory(norm_dir)) { return false; } - dir_ = std::move(dir); + dir_ = std::move(norm_dir); return true; }