Use MoveFileExW to implement FioRenameFile on Windows
This is to allow renaming over an existing file
This commit is contained in:
@@ -383,7 +383,7 @@ void FioCreateDirectory(const std::string &name)
|
||||
bool FioRenameFile(const std::string &oldname, const std::string &newname)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
return _wrename(OTTD2FS(oldname).c_str(), OTTD2FS(newname).c_str()) == 0;
|
||||
return MoveFileExW(OTTD2FS(oldname).c_str(), OTTD2FS(newname).c_str(), MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING) != 0;
|
||||
#else
|
||||
return rename(oldname.c_str(), newname.c_str()) == 0;
|
||||
#endif
|
||||
|
@@ -2908,11 +2908,6 @@ struct FileWriter : SaveFilter {
|
||||
SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE, stdstr_fmt("Temporary save file does not have expected file size: " PRINTF_SIZE " != " PRINTF_SIZE, (size_t)st.st_size, save_size));
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
/* Renaming over an existing file is not supported on Windows, manually unlink the target filename first */
|
||||
unlink(this->target_name.c_str());
|
||||
#endif
|
||||
|
||||
if (!FioRenameFile(this->temp_name, this->target_name)) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE, "Failed to rename temporary save file to target name");
|
||||
this->temp_name.clear(); // Now no need to unlink temporary name
|
||||
}
|
||||
|
Reference in New Issue
Block a user