diff options
-rw-r--r-- | src/corelib/io/qtemporaryfile.cpp | 32 | ||||
-rw-r--r-- | src/corelib/io/qtemporaryfile.h | 4 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index efab2a30ff..a7fa485399 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -54,6 +54,8 @@ #if defined(QT_BUILD_CORE_LIB) #include "qcoreapplication.h" +#else +#define tr(X) QString::fromLatin1(X) #endif QT_BEGIN_NAMESPACE @@ -687,6 +689,36 @@ void QTemporaryFile::setFileTemplate(const QString &name) } /*! + \internal + + This is just a simplified version of QFile::rename() because we know a few + extra details about what kind of file we have. The documentation is hidden + from the user because QFile::rename() should be enough. +*/ +bool QTemporaryFile::rename(const QString &newName) +{ + Q_D(QTemporaryFile); + auto tef = static_cast<QTemporaryFileEngine *>(d->fileEngine); + if (!tef || !tef->isReallyOpen() || !tef->filePathWasTemplate) + return QFile::rename(newName); + + unsetError(); + close(); + if (error() == QFile::NoError) { + if (tef->rename(newName)) { + unsetError(); + // engine was able to handle the new name so we just reset it + tef->setFileName(newName); + d->fileName = newName; + return true; + } + + d->setError(QFile::RenameError, tef->errorString()); + } + return false; +} + +/*! \fn QTemporaryFile *QTemporaryFile::createLocalFile(const QString &fileName) \overload \obsolete diff --git a/src/corelib/io/qtemporaryfile.h b/src/corelib/io/qtemporaryfile.h index 3dc2e75f50..7fc5a299fc 100644 --- a/src/corelib/io/qtemporaryfile.h +++ b/src/corelib/io/qtemporaryfile.h @@ -80,6 +80,10 @@ public: QString fileName() const Q_DECL_OVERRIDE; QString fileTemplate() const; void setFileTemplate(const QString &name); + + // Hides QFile::rename + bool rename(const QString &newName); + #if QT_DEPRECATED_SINCE(5,1) QT_DEPRECATED inline static QTemporaryFile *createLocalFile(const QString &fileName) { return createNativeFile(fileName); } |