mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-02-16 18:19:17 +01:00
77 lines
1.7 KiB
C++
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 {};
|
|
}
|
|
|
|
}
|