簡述
QTemporaryFile類是操作臨時文件的I/O設備。
QTemporaryFile用於安全地創建一個獨一無二的臨時文件。臨時文件通過調用open()來創建,並且名稱是唯一的(即:保證不覆蓋現有文件),該臨時文件將隨着QTemporaryFile對象的析構被刪除。這是一個重要的技術,避免了存儲在臨時文件的應用程序數據損壞。文件名可以自動生成,也可以基於模板(傳參至QTemporaryFile的構造函數)創建。
詳細描述
例如:
QTemporaryFile file; if (file.open()) { // file.fileName() 返回唯一的文件名 } // QTemporaryFile析構,移除臨時文件
- 1
- 2
- 3
- 4
- 5
- 6
在調用close()之后重新打開QTemporaryFile是安全的,只要臨時文件對象還沒有銷毀,臨時文件就一直存在並由QTemporaryFile內部保持打開。
臨時文件的文件名可以通過調用fileName()獲取。注意:在第一次打開后使用,在此之前返回空字符串。
一個臨時文件中會有一些靜態的部分名稱和唯一的計算部分。默認的文件名由QCoreApplication:applicationName()(否則qt_temp)來決定,被放置到QDir::tempPath()返回的臨時路徑中。如果指定了文件名,相對文件路徑將不會被放置在默認的臨時目錄,但會相對於當前的工作目錄。
指定的文件名可以包含下列模板XXXXXX(6個大寫的“X”字符),將由文件名的自動生成部分來代替。
注意:模板是區分大小寫的,如果模板中不存在文件名,QTemporaryFile會追加生成部分到給定的文件名。
常用接口
-
bool autoRemove() const
是否是自動刪除模式。 -
QString fileTemplate() const
獲取文件模板。 -
void setAutoRemove(bool b)
設置是否為自動刪除模式。默認情況下,自動刪除模式打開。 -
bool open()
QTemporaryFile在QIODevice::ReadWrite(讀寫)模式下總是打開的,這方便訪問文件中的數據。成功時返回true,將設置fileName()為唯一的文件名。 -
void setFileTemplate(const QString & name)
設置文件模板。默認文件模板為qcoreappname.XXXXXX,被放置在QDir::tempPath()目錄中。 -
virtual QString fileName() const
重新實現QFileDevice::fileName()獲取完整的唯一文件名。在QTemporaryFile打開之前,返回值為空,之后將包含fileTemplate(),加上其它的字符使其唯一。
-
QTemporaryFile * createNativeFile(QFile & file)
創建本地臨時文件如果文件不是本地文件,使用QDir::tempPath()創建一個QTemporaryFile,將文件的內容復制給它。如果文件是一個本地文件,返回0,什么都不做。
例如:
QFile f(":/resources/file.txt"); QTemporaryFile::createNativeFile(f); // 返回一個QTemporaryFile指針 QFile f("/users/qt/file.txt"); QTemporaryFile::createNativeFile(f); // 返回0
- 1
- 2
- 3
- 4
- 5
-
QTemporaryFile * createNativeFile(const QString & fileName)
這是一個重載函數。適用於給定的文件名,而不是現有QFile對象。
-
bool open(OpenMode flags)
重新實現QIODevice::open()為臨時文件創建一個唯一的文件名,並將其打開。然后通過調用fileName()來獲得唯一的名稱。
示例
// 設置模板名稱 QString strFileName = QDir::tempPath() + QDir::separator() + QCoreApplication::applicationName() + "_XXXXXX." + "docx"; QTemporaryFile tmpFile(strFileName); // 設置為不自動刪除 tmpFile.setAutoRemove(false); qDebug() << "tempPath : " << QDir::tempPath(); if (tmpFile.open()) { tmpFile.close(); QString strFileTemplate = tmpFile.fileTemplate(); QString strFileName = tmpFile.fileName(); qDebug() << "fileTemplate : " << strFileTemplate; qDebug() << "fileName : " << strFileName; // tmpFile.remove(); } else { qCritical() << "failed to write temporary file"; }
輸出如下:
tempPath : "C:/Users/Wang/AppData/Local/Temp"
fileTemplate : "C:/Users/zhaoxj/Wang/Local/Temp\\TemporaryFile_XXXXXX.docx"
fileName : "C:/Users/Wang/AppData/Local/Temp/TemporaryFile_p22112.docx"
這時,我們可以去指定的目錄下查找對應的文件。
注意:為了驗證效果,我們使用了setAutoRemove(false),如果使用完需要刪除臨時文件,可以開啟自動刪除模:setAutoRemove(true),也可以手動刪除:tmpFile.remove()。
http://blog.csdn.net/liang19890820/article/details/51820253