Files
anm2ed/src/util/working_directory.cpp

49 lines
1.3 KiB
C++

#include "working_directory.h"
#include <format>
#include "log.h"
#include "path_.h"
namespace anm2ed::util
{
WorkingDirectory::WorkingDirectory(const std::filesystem::path& path, Type type)
{
std::error_code ec{};
previous = std::filesystem::current_path(ec);
if (ec)
{
logger.warning(std::format("Could not query current directory: {}", ec.message()));
previous.clear();
ec.clear();
}
if (type == FILE)
{
std::filesystem::path filePath = path;
std::filesystem::path parentPath = filePath.parent_path();
std::filesystem::current_path(parentPath, ec);
if (ec)
logger.warning(
std::format("Could not set current directory to {}: {}", path::to_utf8(parentPath), ec.message()));
}
else
{
std::filesystem::current_path(path, ec);
if (ec)
logger.warning(std::format("Could not set current directory to {}: {}", path::to_utf8(path), ec.message()));
}
}
WorkingDirectory::~WorkingDirectory()
{
if (previous.empty()) return;
std::error_code ec{};
std::filesystem::current_path(previous, ec);
if (ec)
logger.warning(
std::format("Could not restore current directory to {}: {}", path::to_utf8(previous), ec.message()));
}
}