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