qtemporaryfile類是操作臨時檔案的i/o裝置。
qtemporaryfile用于安全地建立一個獨一無二的臨時檔案。臨時檔案通過調用open()來建立,并且名稱是唯一的(即:保證不覆寫現有檔案),該臨時檔案将随着qtemporaryfile對象的析構被删除。這是一個重要的技術,避免了存儲在臨時檔案的應用程式資料損壞。檔案名可以自動生成,也可以基于模闆(傳參至qtemporaryfile的構造函數)建立。
<a href="#%e7%ae%80%e8%bf%b0">簡述</a>
<a href="#%e8%af%a6%e7%bb%86%e6%8f%8f%e8%bf%b0">較長的描述</a>
<a href="#%e5%b8%b8%e7%94%a8%e6%8e%a5%e5%8f%a3">常用接口</a>
<a href="#%e7%a4%ba%e4%be%8b">示例</a>
例如:
在調用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,什麼都不做。
qtemporaryfile * createnativefile(const qstring & filename)
這是一個重載函數。
适用于給定的檔案名,而不是現有qfile對象。
bool open(openmode flags)
重新實作qiodevice::open()
為臨時檔案建立一個唯一的檔案名,并将其打開。然後通過調用filename()來獲得唯一的名稱。
輸出如下:
<code>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"</code>
這時,我們可以去指定的目錄下查找對應的檔案。
注意:為了驗證效果,我們使用了setautoremove(false),如果使用完需要删除臨時檔案,可以開啟自動删除模:setautoremove(true),也可以手動删除:tmpfile.remove()。