简述

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的更多相关文章

  1. Qt之QTemporaryFile(文件名唯一,且可以自动删除)

    简述 QTemporaryFile类是操作临时文件的I/O设备. QTemporaryFile用于安全地创建一个独一无二的临时文件.临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖 ...

  2. 《Qt 实战一二三》

    简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...

  3. Qt之QFileIconProvider(根据扩展名获取文件图标、类型)

    简述 在Qt之QFileIconProvider一节中已经讲解关于如何获取文件图标与类型.但只仍针对本地已存在的文件,此节,我们主要运用前面分享的内容,讲述如何通过任意后缀或本地不存在的文件来获取相关 ...

  4. 第32课 Qt中的文件操作

    1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...

  5. Qt 二进制文件读写(使用“魔术数字”)

    今天开始进入 Qt 的另一个部分:文件读写,也就是 IO.文件读写在很多应用程序中都是需要的.Qt 通过 QIODevice 提供了IO的抽象,这种设备(device)具有读写字节块的能力.常用的IO ...

  6. qt 总结

    Qt中的每个类,都有一个对应的同名头文件,其中包含其类定义.例如要使用QApplication类,则需要在程序中添加" #include <QApplication>" ...

  7. Qt 学习之路 :文件

    文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统. Qt 通过QIODevice提 ...

  8. Qt 学习之路:文件

    文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统. Qt 通过QIODevice提 ...

  9. Qt 文件处理(readLine可以读取char[],并且有qSetFieldWidth qSetPadChar 等全局函数)

    Qt 文件处理 Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件,Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFil ...

随机推荐

  1. webpack中关于require与import的区别

    1.require常见使用场景: var path = require('path') var utils = require('./utils') 此时webpack会将path/utils/con ...

  2. Vue基础操作

    一.Vue入门基础知识 1.Vue使用的基本操作 i. 先下载,引入vue.jsii. Vue,实例化一个vue实例化对象(new Vue({})) 1. 新建一个vue实例化对象(Vue是一个构造函 ...

  3. ASP.NET--Attribute定义及用法

    1.Attribute定义 公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .N ...

  4. POJ 3270

    黑书上的经典题了.我说说解这个题的巧妙的地方吧. 首先,竟然和置换联系起来了.因为其实一个交换即至少可以使其中一个元素到达指定位置了.和循环置换联合起来,使得一个循环内的数可以一步到达指定位置,很巧妙 ...

  5. Windows下面使用curl

    Windows下面使用curl 学习了:https://www.cnblogs.com/xing901022/p/4652624.html 下载地址:https://curl.haxx.se/down ...

  6. Android多媒体学习六:利用Service实现背景音乐的播放

    Android同意我们使用Service组件来完毕后台任务.这些任务的同意不会影响到用户其它的交互. 1.Activity类 [java] view plaincopy package demo.ca ...

  7. MFC 加入背景图片并让控件背景透明

    /*加入背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) {  // TODO: 在此加入消息处理程序代码和/或调用默认值  CDialog::OnEraseB ...

  8. Forms authentication timeout vs sessionState timeout

    https://stackoverflow.com/questions/17812994/forms-authentication-timeout-vs-sessionstate-timeout Th ...

  9. 90.bower解决js的依赖管理

    转自:https://blog.csdn.net/u011537073/article/details/52951122 前言一个新的web项目开始,我们总是很自然地去下载需要用到的js类库文件,比如 ...

  10. Server Tomcat v7.0 Server at localhost failed to start.解决办法(图文详解)

    问题描述 Server Tomcat v7.0 Server at localhost failed to start. 解决办法 把你工作空间文件夹下的如下路径打开: <workspace-d ...