diff --git a/Source/Core/Common/IniFile.cpp b/Source/Core/Common/IniFile.cpp index b345f6c0fe..1fbb8cd6a6 100644 --- a/Source/Core/Common/IniFile.cpp +++ b/Source/Core/Common/IniFile.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -317,12 +318,22 @@ bool IniFile::Load(const std::string& filename, bool keep_current_data) bool IniFile::Save(const std::string& filename) { + + // Create parent directories if they don't exist + std::filesystem::path path(filename); + std::filesystem::path parentPath = path.parent_path(); + + if (!exists(parentPath) && !create_directories(parentPath)) { + std::cerr << "Failed to create directory: " << parentPath << std::endl; + } + std::ofstream out; std::string temp = File::GetTempFilenameForAtomicWrite(filename); File::OpenFStream(out, temp, std::ios::out); if (out.fail()) { + std::cerr << "Failed to open temporary file for writing: " << temp << std::endl; return false; } diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 21d722290e..4ad10edb73 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -68,6 +68,11 @@ SConfig::SConfig() LoadDefaults(); // Make sure we have log manager LoadSettings(); + + // Check if config exists before saving + if (!File::Exists(File::GetUserPath(F_DOLPHINCONFIG_IDX))) { + SaveSettings(); + } } void SConfig::Init()