天天看點

Qt之QTemporaryFile簡述較長的描述常用接口示例

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 &amp; name)

設定檔案模闆。預設檔案模闆為qcoreappname.xxxxxx,被放置在qdir::temppath()目錄中。

virtual qstring filename() const

重新實作qfiledevice::filename()

擷取完整的唯一檔案名。在qtemporaryfile打開之前,傳回值為空,之後将包含filetemplate(),加上其它的字元使其唯一。

qtemporaryfile * createnativefile(qfile &amp; file)

建立本地臨時檔案

如果檔案不是本地檔案,使用qdir::temppath()建立一個qtemporaryfile,将檔案的内容複制給它。如果檔案是一個本地檔案,傳回0,什麼都不做。

qtemporaryfile * createnativefile(const qstring &amp; 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()。

繼續閱讀