Cemu/src/config/PermanentStorage.cpp

77 lines
1.7 KiB
C++

#include "PermanentStorage.h"
#include "config/CemuConfig.h"
#include "util/helpers/SystemException.h"
PermanentStorage::PermanentStorage()
{
if (!GetConfig().permanent_storage)
throw PSDisabledException();
const char* appdata = std::getenv("LOCALAPPDATA");
if (!appdata)
throw std::runtime_error("can't get LOCALAPPDATA");
m_storage_path = appdata;
m_storage_path /= "Cemu";
fs::create_directories(m_storage_path);
}
PermanentStorage::~PermanentStorage()
{
if (m_remove_storage)
{
std::error_code ec;
fs::remove_all(m_storage_path, ec);
if (ec)
{
SystemException ex(ec);
cemuLog_log(LogType::Force, "can't remove permanent storage: {}", ex.what());
}
}
}
void PermanentStorage::ClearAllFiles() const
{
fs::remove_all(m_storage_path);
fs::create_directories(m_storage_path);
}
void PermanentStorage::RemoveStorage()
{
m_remove_storage = true;
}
void PermanentStorage::WriteStringToFile(std::string_view filename, std::string_view content)
{
const auto name = m_storage_path.append(filename.data(), filename.data() + filename.size());
std::ofstream file(name.string());
file.write(content.data(), (uint32_t)content.size());
}
std::string PermanentStorage::ReadFile(std::string_view filename) noexcept
{
try
{
const auto name = m_storage_path.append(filename.data(), filename.data() + filename.size());
std::ifstream file(name, std::ios::in | std::ios::ate);
if (!file.is_open())
return {};
const auto end = file.tellg();
file.seekg(0, std::ios::beg);
const auto file_size = end - file.tellg();
if (file_size == 0)
return {};
std::string result;
result.resize(file_size);
file.read(result.data(), file_size);
return result;
}
catch (...)
{
return {};
}
}