天天看点

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()。

继续阅读