qt创建临时文件

1、临时文件系统

        在 Linux 系统中,创建临时文件系统很简单,执行如下指令即可:

mount -t tmpfs -o size=1024m tmpfs /mnt/tmp

        挂载成功后,在 /mnt/tmp 这个挂载点下创建的所有文件都将会是临时文件, 也就是说:当电脑关机之后,这些文件就消失了。

        这样做的好处是:不需要硬盘的 I/O 操作,读写速度都非常快!

2、QTemporaryFile类

        作用:创建临时文件,临时文件为输入文件路径+符号“.”+6个随机字符。

        QTemporaryFile用于安全地创建一个独一无二的临时文件。临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖现有文件),该临时文件将随着QTemporaryFile对象的析构被删除。这是一个重要的技术,避免了存储在临时文件的应用程序数据损坏。

2.1、使用示例

#include <QTemporaryFile>QTemporaryFile file;
if (file.open())
{// file.close();qDebug() << "tempPath:" << QDir::tempPath();qDebug() << "fileTemplate:" << file.fileTemplate();  // 获得模板路径qDebug() << "fileName:" << file.fileName(); // 获得唯一的名称
}

结果:

tempPath: "C:/Users/i/AppData/Local/Temp"
fileTemplate: "C:/Users/i/AppData/Local/Temp/project.XXXXXX"
fileName: "C:/Users/i/AppData/Local/Temp/project.qixEmr

        a)QTemporaryFile定义后,若未打开或打开失败,则file.fileName()返回空字符串;

        b)file.open()创建临时文件,若失败则为无权限或其它原因;

        c)在调用close()之后重新打开QTemporaryFile是安全的,只要临时文件对象还没有销毁,临时文件就一直存在并由QTemporaryFile内部保持打开;

        d)一个临时文件中会有一些静态的部分名称和唯一的计算部分。默认的文件名由QCoreApplication:applicationName()(否则qt_temp)来决定,被放置到QDir::tempPath()返回的临时路径中。如果指定了文件名,相对文件路径将不会被放置在默认的临时目录,但会相对于当前的工作目录;

        e)指定的文件名可以包含下列模板XXXXXX(6个大写的“X”字符),将由文件名的自动生成部分来代替,模板是区分大小写的,如果模板中不存在文件名,QTemporaryFile会追加生成部分到给定的文件名。

2.2、常用API介绍

        bool open() :// QTemporaryFile在QIODevice::ReadWrite(读写)模式下总是打开的,这方便访问文件中的数据。成功时返回true,将设置fileName()为唯一的文件名;

        bool open(OpenMode flags) : // 重新实现QIODevice::open(),为临时文件创建一个唯一的文件名,并将其打开。然后通过调用fileName()来获得唯一的名称;

        bool autoRemove() const :// 是否是自动删除模式。

        void setAutoRemove(bool b) : // 设置是否为自动删除模式。默认情况下,自动删除模式打开。

        QString fileTemplate() const :// 获取文件模板。

        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对象。

2.3、使用实例

// 设置模板名称
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";
}

        注意:为了验证效果,我们使用了setAutoRemove(false),如果使用完需要删除临时文件,可以开启自动删除模:setAutoRemove(true),也可以手动删除:tmpFile.remove()。

3、自定义实现QTemporaryFile类

class CTest; // 声明class EnFile{public:EnFile() {};~EnFile() { release(); };void release() {if (QFile(mFilePath).exists())QFile(mFilePath).remove();mFilePath = "";};QString path() { return mFilePath; }private:QString mFilePath;void createCachePath() {mFilePath = QDir::cleanPath(QDir::tempPath() + QDir::separator() + "b331a2f5652bb73f.temp");QTemporaryFile tFile(mFilePath);if (!tFile.open()){QString cachePath = QDir::homePath() + "/.cache/";QDir dir(cachePath);if (!dir.exists())dir.mkdir(cachePath);mFilePath = QDir::cleanPath(cachePath + QDir::separator() + "b331a2f5652bb73f.temp");}};friend class CTest;
//友元类,操作createCachePath()函数
};

4、QTemporaryDir类

QTemporaryDir dir("logs");
if (dir.isValid())
{// dir.path() returns the unique directory pathqDebug() << "temp dir = " << dir.path();
}

1、Windows系统中,如何读写临时文件

Windows系统中,如何读写临时文件-51CTO.COM

2、Windows下CreateFile参数意义

如何使用CreateFile函数在Windows操作系统中创建新文件?-深圳春合晟辉

3、文件目录操作(QCoreApplication、QFile、QFileInfo、QDir、QTemporaryDir/File、QFileSystemWatcher)

Qt:42---文件目录操作(QCoreApplication、QFile、QFileInfo、QDir、QTemporaryDir/File、QFileSystemWatcher)_51CTO博客_qt 文件目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/55375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《C语言编程环境搭建》工欲善其事 必先利其器

C语言编译器 GCC 系列 GNU编译器套装(英语&#xff1a;GNU Compiler Collection&#xff0c;缩写为GCC)&#xff0c;指一套编程语言编译器&#xff0c;常被认为是跨平台编译器的事实标准。原名是&#xff1a;GNU C语言编译器(GNU C Compiler)。 MinGW 又称mingw32 &#xff0c…

DevOps中的持续测试优势和工具

持续测试 DevOps中的持续测试是一种软件测试类型&#xff0c;它涉及在软件开发生命周期的每个阶段测试软件。持续测试的目标是通过早期测试和经常测试来评估持续交付过程的每一步的软件质量。 DevOps中的持续测试流程涉及开发人员、DevOps、QA和操作系统等利益相关者。 持续…

组件库的使用和自定义组件

目录 一、组件库介绍 1、什么是组件 2、组件库介绍 3、arco.design 二、组件库的使用 1、快速上手 2、主题定制 3、暗黑模式 4、语言国际化 5、业务常见问题 三、自定义组件 2、组件开发规范 3、示例实践guide-tip 4、业务组件快速托管 一、组件库介绍 1、什么是…

9个python自动化脚本,PPT批量生成缩略图、添加图片、重命名

引言 最近一番在整理资料&#xff0c;之前买的PPT资源很大很多&#xff0c;但归类并不好&#xff0c;于是一番准备把这些PPT资源重新整理一下。统计了下&#xff0c;这些PPT资源大概有2000多个&#xff0c;一共30多G&#xff0c;一个一个手动整理这个投入产出比也太低了。 作为…

openGauss学习笔记-49 openGauss 高级特性-索引推荐

文章目录 openGauss学习笔记-49 openGauss 高级特性-索引推荐49.1 单query索引推荐49.2 虚拟索引49.3 workload级别索引推荐 openGauss学习笔记-49 openGauss 高级特性-索引推荐 openGauss的索引推荐的功能&#xff0c;共包含三个子功能&#xff1a;单query索引推荐、虚拟索引…

数据结构基础:P3-树(上)----编程作业02:List Leaves

本系列文章为浙江大学陈越、何钦铭数据结构学习笔记&#xff0c;系列文章链接如下&#xff1a; 数据结构(陈越、何钦铭)学习笔记 文章目录 一、题目描述二、整体思路与实现代码 一、题目描述 题目描述&#xff1a; 给定一棵树&#xff0c;按照从上到下、从左到右的顺序列出所有…

【填坑向】MySQL常见报错及处理系列(ERROR! The server quit without updating PID file)

本系列其他文章 【填坑向】MySQL常见报错及处理系列&#xff08;Communications link failure & Access denied for user ‘root‘‘localhost‘&#xff09;_AQin1012的博客-CSDN博客翻一下大致的意思就是默认会按照如下的顺序读取配置文件&#xff0c;我上面贴出的配置文…

⛳ Docker 安装 MySQL

&#x1f38d;目录 ⛳ Docker 安装 MySQL&#x1f69c; 一、搜索 mysql , 查看版本&#x1f3a8; 二、拉取mysql镜像&#x1f463; 三、建立容器的挂载文件&#x1f9f0; 四、创建mysql配置文件&#xff0c;my.conf&#x1f3ed; 五、根据镜像产生容器&#x1f381; 六、远程连…

可追溯性在现代产品和系统开发中的关键作用

追溯性在产品、系统和软件开发中起着关键的作用&#xff0c;因为它允许组织能够记录参与产品设计、生产、测试和交付的所有组件和活动。本质上&#xff0c;追溯性就是能够提供一份记录&#xff0c;这份记录展示了一个产品或系统从初始到最终状态的所有过程&#xff0c;以此保证…

Java基础 数据结构一【栈、队列】

什么是数据结构 数据结构是计算机科学中的一个重要概念&#xff0c;用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据&#xff0c;以便于在不同操作中进行查找、插入、删除等操作 数据结构可以看作是一种数据的组织方式&#xff0c;不…

[NLP]深入理解 Megatron-LM

一. 导读 NVIDIA Megatron-LM 是一个基于 PyTorch 的分布式训练框架&#xff0c;用来训练基于Transformer的大型语言模型。Megatron-LM 综合应用了数据并行&#xff08;Data Parallelism&#xff09;&#xff0c;张量并行&#xff08;Tensor Parallelism&#xff09;和流水线并…

docker-maven-plugin直接把镜像推到私有仓库

接着上篇 推送到本地docker 我们已经把服务做成镜像推到docker&#xff0c;也可以通过docker login 私有地址&#xff0c;去push。麻烦 直接上代码 1、pom改动 <properties><docker.registry>eco-registry.XXX.com</docker.repostory><docker.registry…

docker swarm 部署服务网络问题

docker swarm 服务部署问题 docker swarm 部署服务时可能会出现&#xff0c;启动服务特别慢的情况&#xff0c;甚至一个service 启动后&#xff0c;容器会长时间处于 preparing 状态&#xff0c;直到 状态切换成 running 状态后&#xff0c;才会启动下一个service。然后查询资…

flask中GET和POST的区别

GET和POST是HTTP协议中两种常用的请求方法&#xff0c;它们在如何向服务器发送数据以及数据传输方式上有所不同。下面是GET和POST的主要区别&#xff1a; 一、数据传输位置&#xff1a; GET&#xff1a;将数据通过URL的查询字符串部分&#xff08;即URL的参数&#xff09;传递…

项目---日志系统

目录 项目系统开发环境核心技术日志系统介绍为什么需要日志系统? 日志系统框架设计日志系统模块划分代码实现通用工具实现日志等级模块实现日志消息模块实现格式化模块实现落地模块实现日志器模块同步日志器异步日志器缓冲区实现异步工作器实现 回归异步日志器模块建造者模式日…

KVM创建虚拟机可访问外网+可使用Xshell等工具连接

创建虚拟机时使用桥接网络模块即可&#xff0c;如下&#xff1a; 1、创建一个存储卷(虚拟机的磁盘) 2、创建虚拟机时选择网络 3、系统安装完成后配置固定IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOTyes BOOTPROTOstatic IPADDR16.32.15.60 GATEWAY16.32.15.2…

C++--两个数组的dp问题(2)

1.交错字符串 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定三个字符串 s1、s2、s3&#xff0c;请判断 s3 能不能由 s1 和 s2 交织&#xff08;交错&#xff09; 组成。 两个字符串 s 和 t 交织 的定义与过程如下&#xff0c;其中每个字符串都…

SpringBoot实现文件上传和下载笔记分享(提供Gitee源码)

前言&#xff1a;这边汇总了一下目前SpringBoot项目当中常见文件上传和下载的功能&#xff0c;一共三种常见的下载方式和一种上传方式&#xff0c;特此做一个笔记分享。 目录 一、pom依赖 二、yml配置文件 三、文件下载 3.1、使用Spring框架提供的下载方式 3.2、通过IOUti…

NIO原理浅析(一)

IO简介 摘抄了下维基百科对IO的定义&#xff0c;Input/Output&#xff0c;输入和输出&#xff0c;通常指数据在存储器或者其他周边设备之间的输出和输入&#xff0c;输入是系统接收到信号或者数据&#xff0c;输出则是从系统发送的信号或数据。 Java IO 读写原理 Java中文件…

[python]问题:python中如何将二维数据的某列打印出来

在Python中,可以使用列表推导式(list comprehension)来从二维数据中提取某一列的数据并打印出来。假设你有一个二维列表data,你想要打印出第n列的数据,可以使用以下代码: data = [[1, 2, 3],[4, 5, 6],[7</