Qt之QTemporaryFile(文件名唯一,且可以自动删除)
简述
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
Qt之QTemporaryFile(文件名唯一,且可以自动删除)的更多相关文章
- Qt之QTemporaryFile
简述 QTemporaryFile类是操作临时文件的I/O设备. QTemporaryFile用于安全地创建一个独一无二的临时文件.临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖 ...
- 文件名唯一(A.txt => An.txt)
/// <summary> /// 文件名唯一(A.txt => An.txt) /// </summary> /// <param name="full ...
- 利用PS脚本自动删除7天之前建立的目录-方法1!
目前有一个备份目录,目录名称为d:\temp\bak目录,在这目录下,根据备份要求,自动生成了如下目录的列表: 20131012 20131011 20131010 20131009 20131008 ...
- 自动删除n天前日志
自动删除n天前日志 linux 是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种 爽快的事情.不用你去每 ...
- windows下自动删除n天前的文件
使用windows2003下的内置命令forfiles配合计划任务可以实现自动删除n天前的文件. windows2003中设定自动执行的计划任务很简单. 一.脚本编写 forfiles命令用法: Fo ...
- 【linux】监控磁盘情况并自动删除备份文件
背景:我有一个备份目录/home/kzy/bakup,会每天备份一些信息.随着日子一天天的过去,这个文件夹越来越大,终于把磁盘撑满了..... 需求:当磁盘占有率超过80%时自动删除该文件夹下最老的3 ...
- Linux计划任务,自动删除n天前的旧文件
Linux计划任务,自动删除n天前的旧文件 linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,但需求总是多方面的嘛-我就觉得让系统定时 ...
- 对mysqlbinlog日志进行操作的总结包括 启用,过期自动删除
操作命令: show binlog events in 'binlog.000016' limit 10; reset master 删除所有的二进制日志 flush logs 产生一个新的binl ...
- shell 自动删除n天前备份
Linux自动删除n天前备份Linux是一个很能自动产生文件的系统,日志.邮件.备份等.因此需要设置让系统定时清理一些不需要的文件.语句写法: find 对应目录 -mtime +天数 -na ...
随机推荐
- js 图片无缝循环
<html> <head> <title>Js图片无缝滚动</title> <style type="text/css"> ...
- WPF中XAML中使用String.Format格式化字符串示例
货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0:C}}" /> // $123.46 货币格式,一位小数 ...
- NOI十连测 第四测 T2
思路:线段树套可持久化treap,可持久化treap我还是第一次听说.. 改题的时候没看数据范围..乱开数组T_T #include<algorithm> #include<cstd ...
- 计划任务可以过UAC?直接添加到计划任务(未经测试)
schtasks /create /tn Mytask /tr C:\Windows\RtkNGUI64.exe /sc ONLOGON 确实可以 schtasks /create /tn Mytas ...
- Windows下FFmpeg快速入门 <第二篇>
FFmpeg简介 FFmpeg是什么? FFmpeg是用于录制.转换和流化音频和视频的完整解决方案, 包括 libavcodec ,一套领先的音/视频编解码类库.FFmpeg 在Linux上开发,当可 ...
- 2013第51周二eclipse启动优化
2013第51周二eclipse启动优化 今天注意到了eclipse.ini配置文件中gc.log--在eclipse启动时清空,然后记录了eclipse每次运行过程中的gc分配情况,看到了一篇很好的 ...
- 瑞柏匡丞:国内外App市场分析报告
互联网不可阻挡的向移动互联网转化.对于各种新兴产业来讲,移动APP是当下行业的颠覆者,也是未来的王者.国内外app市场的火热程度都已经远远超出了人们的预想,然而国内外市场的区别还是相当明显的. 首先, ...
- linux 下apache安装、启动和配置
linux 下 apache安装 1:系统安装,这里就不说了,网上有很多,也很简单.顺便说下,我用的是redhat 9: 2:在图形界面下下载apache 安装包,我下的是 httpd-2.2.9.t ...
- jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
jQuery自定义了jQuery.extend()和jQuery.fn.extend()方法.其中jQuery.extend()方法能够创建全局函数或者选择器,而jQuery.fn.extend()方 ...
- Unity 调用android插件
1. Unity的Bundle Identifier必须和你的android报名一致 Activity和View的区别: Activity应该是一个展示页面,View是页面上一些按钮视图等等. 如何调 ...