diff options
-rw-r--r-- | dist/changes-4.7.1.md | 6 | ||||
-rw-r--r-- | src/libs/utils/savefile.cpp | 27 |
2 files changed, 26 insertions, 7 deletions
diff --git a/dist/changes-4.7.1.md b/dist/changes-4.7.1.md index e8eddc27e6..2248727617 100644 --- a/dist/changes-4.7.1.md +++ b/dist/changes-4.7.1.md @@ -25,9 +25,15 @@ C++ Support * Clang Code Model * Fixed include order for Clang headers +QML Support + +* Fixed that comments could break reformatting (QTCREATORBUG-21036) + Debugging * Fixed remote debugging command line argument (QTCREATORBUG-20928) +* Fixed environment for `Start and Debug External Application` + (QTCREATORBUG-20185) * GDB * Fixed GDB built-in pretty printer handling (QTCREATORBUG-20770) * CDB diff --git a/src/libs/utils/savefile.cpp b/src/libs/utils/savefile.cpp index 36b515568e..5864ece3ef 100644 --- a/src/libs/utils/savefile.cpp +++ b/src/libs/utils/savefile.cpp @@ -128,19 +128,32 @@ bool SaveFile::commit() fileName().toStdWString().data(), nullptr, REPLACEFILE_IGNORE_MERGE_ERRORS, nullptr, nullptr); if (!result) { - const DWORD replaceErrorCode = GetLastError(); + DWORD replaceErrorCode = GetLastError(); QString errorStr; if (!QFile::exists(finalFileName)) { // Replace failed because finalFileName does not exist, try rename. if (!(result = rename(finalFileName))) errorStr = errorString(); } else { - wchar_t messageBuffer[256]; - FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - nullptr, replaceErrorCode, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - messageBuffer, sizeof(messageBuffer), nullptr); - errorStr = QString::fromWCharArray(messageBuffer); + if (replaceErrorCode == ERROR_UNABLE_TO_REMOVE_REPLACED) { + // If we do not get the rights to remove the original final file we still might try + // to replace the file contents + result = MoveFileEx(fileName().toStdWString().data(), + finalFileName.toStdWString().data(), + MOVEFILE_COPY_ALLOWED + | MOVEFILE_REPLACE_EXISTING + | MOVEFILE_WRITE_THROUGH); + if (!result) + replaceErrorCode = GetLastError(); + } + if (!result) { + wchar_t messageBuffer[256]; + FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + nullptr, replaceErrorCode, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + messageBuffer, sizeof(messageBuffer), nullptr); + errorStr = QString::fromWCharArray(messageBuffer); + } } if (!result) { remove(); |