qt创建临时文件

这篇具有很好参考价值的文章主要介绍了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 path
    qDebug() << "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 文件目录文章来源地址https://www.toymoban.com/news/detail-693140.html

到了这里,关于qt创建临时文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 查询服务器tns文件路径,oracle数据库tns配置方法详解

    Oracle中TNS的完整定义:transparence Network Substrate透明网络底层, 监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器。 上图中的CGDB和STDCG就是对应的TNS,HOST是指向数据库服务器的IP,当然局域网内用计算机名称也是可以的。通过客户端Net Manager创建一个连接到数据

    2024年02月09日
    浏览(62)
  • 如何将本地开发完成后的数据库文件迁移到服务器中

    将本地开发完成后的数据库文件迁移到服务器中的数据库是一个常见的操作,尤其是在项目部署阶段。这个过程大致可以分为导出(备份)本地数据库、传输文件到服务器、以及导入数据库到服务器数据库中三个步骤。这里我将以 MySQL 和 MongoDB 为例来说明这个过程。 对于

    2024年03月19日
    浏览(58)
  • 数据库——报错:无法创建链接服务器 “(null)“ 的 OLE DB 访问接口 “Microsoft.Ace.OLEDB.12.0“ 的实例。

    安装完 AccessDatabaseEngine_X64 (2012).exe 后,准备在从Excel导入数据时: 输入如下代码 报错一: SQLServer阻止了对组件’AdHocDistributedQueries’的STATEMENT’OpenRowset/OpenDatasource’的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用。sp_configure启用’

    2024年02月12日
    浏览(36)
  • qt创建临时文件

    1、临时文件系统         在 Linux 系统中,创建临时文件系统很简单,执行如下指令即可:         挂载成功后,在 /mnt/tmp 这个挂载点下创建的所有文件都将会是临时文件, 也就是说:当电脑关机之后,这些文件就消失了。         这样做的好处是:不需要硬盘的

    2024年02月10日
    浏览(35)
  • Win11系统设置计算机二级MySQL环境变量,设置创建数据库默认的字符集为utf8mb4,设置WampServer服务器phpMyAdmin程序。

    NCRE官网的二级MySQL考试应用软件下载 : 点击下载 WinRAR解压软件 :点击下载 微软常用运行库合集: 点击下载:来源https://www.mefcl.com/yxk-dreamcast/249 wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b 安装过程要选择默认浏览器,选择Win11自带Microsoft Edge浏览器 选择浏览器路径:C:Program

    2024年02月20日
    浏览(45)
  • 完美解决:访问WordPress时候出现 建立数据库连接时出错您看到此页面,则表示您在 wp-config.php 文件中定义的用户名和密码信息不正确,或是我们无法与 数据库服务器 localhost

    目录 一、问题: 二、原因: 三、解决方法: 您看到此页面,则表示您在  wp-config.php  文件中定义的用户名和密码信息不正确,或是我们无法与 数据库服务器  localhost  进行通信。也可能是您主机的数据库服务器未在运行。 您确定用户名和密码正确吗? 您确定输入的主机

    2024年01月17日
    浏览(71)
  • shp文件与数据库(创建shp文件)

    前面把shp文件中的内容读取到数据库,接下来就把数据库中的表变成shp文件。 暂时不读取数据库的表,先随机创建一个shp文件。既然是随机的,这就需要使用到faker这个第三方库,代码如下。 运行代码 在桌面的out文件中生成faker_data.shp文件,如下图所示 查看生成shp文件中的

    2024年02月01日
    浏览(38)
  • Linux 使用bash创建MYSQL数据库并导入数据库文件

    主要是杠一下的数据库123-456.sql,这个神经病一样,试了很多写法

    2024年01月22日
    浏览(63)
  • 领导临时要数据库文档怎么办?

    很多时候,我们为了着急忙慌赶项目进度,很容易忽略整理文档这件事 某一天,领导心血来潮,要搞一次突击检查, 想看看我们的数据库设计的是否规范, 但他又不想亲自去数据库查验(毕竟这么大领导) 那么,我们该怎么办? 第一种方法:离职,世界那么大,我想去看

    2024年02月08日
    浏览(39)
  • MariaDB数据库服务器

    目录 一、什么是数据库? 二、什么是关系型数据库? 三、数据库字符集和排序规则是什么? 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库? 数据库(DB)是以一定方式长期存储在计算机硬盘内,能与多个用户共享,具有尽可能小的冗余度、与应用程序

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包