Qt之QTemporaryFile
简述
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之QTemporaryFile(文件名唯一,且可以自动删除)
简述 QTemporaryFile类是操作临时文件的I/O设备. QTemporaryFile用于安全地创建一个独一无二的临时文件.临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖 ...
- 《Qt 实战一二三》
简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...
- Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
简述 在Qt之QFileIconProvider一节中已经讲解关于如何获取文件图标与类型.但只仍针对本地已存在的文件,此节,我们主要运用前面分享的内容,讲述如何通过任意后缀或本地不存在的文件来获取相关 ...
- 第32课 Qt中的文件操作
1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...
- Qt 二进制文件读写(使用“魔术数字”)
今天开始进入 Qt 的另一个部分:文件读写,也就是 IO.文件读写在很多应用程序中都是需要的.Qt 通过 QIODevice 提供了IO的抽象,这种设备(device)具有读写字节块的能力.常用的IO ...
- qt 总结
Qt中的每个类,都有一个对应的同名头文件,其中包含其类定义.例如要使用QApplication类,则需要在程序中添加" #include <QApplication>" ...
- Qt 学习之路 :文件
文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统. Qt 通过QIODevice提 ...
- Qt 学习之路:文件
文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统. Qt 通过QIODevice提 ...
- Qt 文件处理(readLine可以读取char[],并且有qSetFieldWidth qSetPadChar 等全局函数)
Qt 文件处理 Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件,Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFil ...
随机推荐
- [USACO07OPEN]Catch That Cow
题目:洛谷P1588.HDU2717 题目大意:有一个人在点$n$,一头牛在点$k$,人每秒能从$x$移动到点$x+1$.$x-1$.$2x$,牛不会动,求最少多少秒后人能移动到牛所在的$k$. 思路 ...
- vivo输入法 需求分析
我使用的输入法:vivo输入法 1,用户界面:界面为白色和灰色,整体简洁大方,个人而言外观挺不错.但是不能自定义界面,更改背景图片或是主题. 2,记住用户选择:可记忆上次使用后的键盘方式(26键或是9 ...
- 新手学python-Day3-模块
模块就是引入别人写的,官方写的工具库,就像扳手,钳子,电锯
- Redis:持久化之RDB和AOF
Redis:持久化之RDB和AOF RDB(Redis DataBase) 在指定的时间间隔内将内存中的数据集快照写入硬盘 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. R ...
- JavaScript push(),join() 函数
定义和用法 push方法 可向数组的末尾添加一个或多个元素,并返回一个新的长度. join方法 用于把数组中所有元素添加到一个指定的字符串,元素是通过指定的分隔符进行分割的. 语法 arrayObje ...
- Nutch2 WebPage 字段解释
Nutch2 WebPage 字段解释 Nutch2.2.1 id
- [React] Unit test a React Render Prop component
In this lesson, I use Enzyme and Jest to unit test a Counter Render Prop component. Writing integrat ...
- 仿hibernate,spring框架手动写
近期学习了hibernate底层技术和spring 的底层技术,认为非常不错,所以想分享下,要是说的不够具体.能够去下载资源自己查看下载链接 技术的体现是在实际中的.如今大体介绍一下吧 首先介绍hib ...
- 深入分析Java中的I/O类的特征及适用场合
Java中有40多个与输入输出有关的类.假设不理清它们之间的关系.就不能灵活地运用它们. 假设从流的流向来分,可分为输入流和输出流,而输入流和输出流又都可分为字节流和字符流.因而可将Java中的I/O ...
- 【Linux驱动】TQ2440 DM9000E网卡驱动移植(Linux-2.6.30.4)
花了一天的时间研究了一下Linux-2.6.30.4版本号内核下关于TQ2440 DM9000E的网卡驱动移植.总结一下自己的收获. 事实上.在Linux-2.6.30.4版本号内核下有关于网卡驱动, ...