Q_DECLARE_PRIVATE(QFSFileEngine)
public:
QTemporaryFileEngine(const QString &file, bool fileIsTemplate = true)
- : QFSFileEngine(), filePathIsTemplate(fileIsTemplate)
+ : QFSFileEngine(), filePathIsTemplate(fileIsTemplate),
+ filePathWasTemplate(fileIsTemplate)
{
Q_D(QFSFileEngine);
d->fileEntry = QFileSystemEntry(file);
bool close();
bool filePathIsTemplate;
+ bool filePathWasTemplate;
};
QTemporaryFileEngine::~QTemporaryFileEngine()
QFSFileEngine::close();
if (QFSFileEngine::remove()) {
d->fileEntry.clear();
+ // If a QTemporaryFile is constructed using a template file path, the path
+ // is generated in QTemporaryFileEngine::open() and then filePathIsTemplate
+ // is set to false. If remove() and then open() are called on the same
+ // QTemporaryFile, the path is not regenerated. Here we ensure that if the
+ // file path was generated, it will be generated again in the scenario above.
+ filePathIsTemplate = filePathWasTemplate;
return true;
}
return false;
void nonWritableCurrentDir();
void write();
void openCloseOpenClose();
+ void removeAndReOpen();
void size();
void resize();
void openOnRootDrives();
QVERIFY(!QFile::exists(fileName));
}
+void tst_QTemporaryFile::removeAndReOpen()
+{
+ QString fileName;
+ {
+ QTemporaryFile file;
+ file.open();
+ fileName = file.fileName();
+ QVERIFY(QFile::exists(fileName));
+
+ file.remove();
+ QVERIFY(!QFile::exists(fileName));
+
+ QVERIFY(file.open());
+ fileName = file.fileName();
+ QVERIFY(QFile::exists(fileName));
+ }
+ QVERIFY(!QFile::exists(fileName));
+}
+
void tst_QTemporaryFile::size()
{
QTemporaryFile file;