diff --git a/Source/Core/Common/IniFile.cpp b/Source/Core/Common/IniFile.cpp index b345f6c0fe..1b9a823e8e 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_directory(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 fa792867b3..4ad10edb73 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -71,7 +71,7 @@ SConfig::SConfig() // Check if config exists before saving if (!File::Exists(File::GetUserPath(F_DOLPHINCONFIG_IDX))) { - Config::Save(); + SaveSettings(); } }