diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 1b39cb0e1..22f651729 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1165,12 +1165,34 @@ void OBSBasic::Load(const char *file) obs_data_t *data = obs_data_create_from_json_file_safe(file, "bak"); if (!data) { disableSaving--; - blog(LOG_INFO, "No scene file found, creating default scene"); - const string name = filesystem::u8path(file).stem().u8string(); + const auto path = filesystem::u8path(file); + const string name = path.stem().u8string(); + /* Check if file exists but failed to load. */ + if (filesystem::exists(path)) { + /* Assume the file is corrupt and rename it to allow + * for manual recovery if possible. */ + auto newPath = path; + newPath.concat(".invalid"); + + blog(LOG_WARNING, + "File exists but appears to be corrupt, renaming " + "to \"%s\" before continuing.", + newPath.filename().u8string().c_str()); + + error_code ec; + filesystem::rename(path, newPath, ec); + if (ec) { + blog(LOG_ERROR, + "Failed renaming corrupt file with %d", + ec.value()); + } + } + config_set_string(App()->GlobalConfig(), "Basic", "SceneCollection", name.c_str()); config_set_string(App()->GlobalConfig(), "Basic", "SceneCollectionFile", name.c_str()); + blog(LOG_INFO, "No scene file found, creating default scene"); CreateDefaultScene(true); SaveProject(); return;