diff options
author | Katja Marttila <katja.marttila@qt.io> | 2018-09-24 11:06:14 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2018-09-24 09:19:54 +0000 |
commit | 7ad0627b014f3a2368268546fb246bd55dbd3e8a (patch) | |
tree | 28f2f7de13e2bbd75e83bcaf57d7f5fa5770f57b /src | |
parent | 6049f98b3d22781800220daca7ae82eff775e9cc (diff) |
Delete directory if there are readonly files
Task-number:QTIFW-637
Change-Id: I38b947b10517de68aee5619915886c719cd5e2bf
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index 58744b3c2..c142b55f1 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -173,14 +173,23 @@ void QInstaller::removeFiles(const QString &path, bool ignoreErrors) const QFileInfoList entries = QDir(path).entryInfoList(QDir::AllEntries | QDir::Hidden); foreach (const QFileInfo &fi, entries) { if (fi.isSymLink() || fi.isFile()) { - QFile f(fi.filePath()); - if (!f.remove()) { - const QString errorMessage = QCoreApplication::translate("QInstaller", - "Cannot remove file \"%1\": %2").arg( - QDir::toNativeSeparators(f.fileName()), f.errorString()); - if (!ignoreErrors) - throw Error(errorMessage); - qWarning().noquote() << errorMessage; + QString filePath = fi.filePath(); + QFile f(filePath); + bool ok = f.remove(); + if (!ok) { //ReadOnly can prevent removing in Windows. Change permission and try again. + const QFile::Permissions permissions = f.permissions(); + if (!(permissions & QFile::WriteUser)) { + ok = f.setPermissions(filePath, permissions | QFile::WriteUser) + && f.remove(filePath); + } + if (!ok) { + const QString errorMessage = QCoreApplication::translate("QInstaller", + "Cannot remove file \"%1\": %2").arg( + QDir::toNativeSeparators(f.fileName()), f.errorString()); + if (!ignoreErrors) + throw Error(errorMessage); + qWarning().noquote() << errorMessage; + } } } } |