Qt之QTemporaryFile
来源:互联网 发布:大数据存储公司 编辑:程序博客网 时间:2024/06/10 21:52
简述
QTemporaryFile类是操作临时文件的I/O设备。
QTemporaryFile用于安全地创建一个独一无二的临时文件。临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖现有文件),该临时文件将随着QTemporaryFile对象的析构被删除。这是一个重要的技术,避免了存储在临时文件的应用程序数据损坏。文件名可以自动生成,也可以基于模板(传参至QTemporaryFile的构造函数)创建。
- 简述
- 详细描述
- 常用接口
- 示例
详细描述
例如:
QTemporaryFile file;if (file.open()) { // file.fileName() 返回唯一的文件名}// QTemporaryFile析构,移除临时文件
在调用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
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()。
- Qt之QTemporaryFile
- qt学习之qt creator
- qt学习之qt安装
- Qt基础之hello qt
- Qt之Qt::WA_DeleteOnClose详解
- Qt|Qt之鼠标样式
- Qt 之 Qt Charts 模块
- qt学习之qtableview
- 开始Qt之旅
- Qt之对话框
- QT之正则表达式
- QT之QGroupBox
- Qt之文件操作
- Qt之QListView
- Qt之QtWebKit(一)
- Qt之QGroupBox
- Qt之QtWebKit(二)
- Qt之hello world
- 设计模式之单例模式
- 在VB里怎么实现移位的算术运算操作
- SSH框架编写页面保存实例
- 198. House Robber
- mysql性能调优
- Qt之QTemporaryFile
- PHP+PhpStorm+Xdebug配置方法
- 命令设计模式
- GBK编码,解码。以及,有关url中文转码!
- 几道关于cocos2dx的面试题
- 给BUtton加圆角
- Servlet跳转到Jsp的指定div
- HTML5 Canvas宇宙星云动画特效
- Lab 1:配置环境