网站首页 > 技术教程 正文
前言
上一篇文章中介绍了如何使用QTemporaryDir 来创建临时目录
- Qt之QTemporaryDir用法(创建临时目录)
而今天要说的是如何创建一个临时文件,可以安全的写入,并且可以自动删除该文件,使用 Qt 自带的类QTemporaryFile,其实和QTemporaryDir类似,都是同样的用法。
QTemporaryFile
该QTemporaryFile类是一个临时文件操作的I / O设备。
QTemporaryFile用于安全地创建唯一的临时文件。该文件本身是通过调用open()创建的。临时文件的名称保证是唯一的(保证不覆盖现有文件),并且该文件随后会在销毁QTemporaryFile对象后被删除。这是避免将数据存储在临时文件中的应用程序数据损坏。文件名是自动生成的,或者是根据传递给QTemporaryFile的构造函数的模板创建的。
例如:
// Within a function/method...
QTemporaryFile file;
if (file.open()) {
// file.fileName() returns the unique file name
}
// The QTemporaryFile destructor removes the temporary file
// as it goes out of scope.
调用close()后重新打开QTemporaryFile是安全的。只要QTemporaryFile对象本身没有被破坏,唯一的临时文件就会存在,并由QTemporaryFile在内部保持打开状态。
通过调用fileName()可以找到临时文件的文件名。请注意,这仅在文件首次打开后才定义; 该函数在此之前返回一个空字符串。
临时文件将具有名称的一些静态部分以及计算为唯一的一部分。默认文件名将由QCoreApplication :: applicationName()(否则qt_temp)确定,并将被放置到由QDir :: tempPath()返回的临时路径中。如果指定了自己的文件名,默认情况下相对文件路径不会被放置在临时目录中,而是相对于当前工作目录。
指定的文件名可以包含以下模板XXXXXX(六个大写“X”字符),它将被文件名的自动生成部分替换。
请注意,该模板区分大小写。如果模板不存在于文件名中,QTemporaryFile将生成的部分追加到给定的文件名中。
常用成员函数
void setAutoRemove(bool b)
设置是否为自动删除模式。
自动删除功能默认为开启。
如果将此属性设置为false,确保应用程序提供了一种方法,在文件不再需要时将其删除,包括将责任传递给另一个进程。始终使用fileName()函数来获取名称,并且永远不要猜测QTemporaryFile生成的名称。
在某些系统上,如果在关闭文件之前未调用fileName(),则无论此属性的状态如何,都可以删除临时文件。不应该依赖此行为,因此应用程序代码应该调用fileName()或保持启用自动删除功能。
void QTemporaryFile :: setFileTemplate(const QString&name)
将文件名称的静态部分设置为名称。如果文件模板包含将自动替换为文件名的唯一部分的XXXXXX,否则文件名将根据指定的静态部分自动确定。
如果name包含相对文件路径,则路径将相对于当前工作目录。如果你想使用系统的临时目录,你可以使用QDir :: tempPath()来构造名字。
bool open()
一个QTemporaryFile将永远被打开了QIODevice::ReadWrite 模式,这可以方便地访问文件中的数据。该函数在成功时将返回true,并将fileName()设置为使用的唯一文件名。
静态函数
QTemporaryFile * createNativeFile(QFile &file)
QTemporaryFile * createNativeFile(const QString &fileName)
如果文件已经是一个本地文件,然后QTemporaryFile在创建一个QDir::tempPath(),内容的文件复制到它,并返回一个指向该临时文件。如果文件已经是本机文件,则不做任何事并返回。
例如:
QFile f(":/resources/file.txt");
QTemporaryFile::createNativeFile(f); // Returns a pointer to a temporary file
QFile f("/users/qt/file.txt");
QTemporaryFile::createNativeFile(f); // Returns 0
示例
//QTemporaryFile示例
QString tmpname = QDir::homePath() + QDir::separator() + QCoreApplication::applicationName() + "_XXXXXX." + "txt";
QTemporaryFile tmpFile(tmpname);
tmpFile.setAutoRemove(false);
if(tmpFile.open()){
qDebug() << __FUNCTION__ << tmpFile.fileTemplate();
qDebug() << __FUNCTION__ << tmpFile.fileName();
}
QFile f(tmpFile.fileName());
bool ok = QTemporaryFile::createNativeFile(f);//如果文件存在,返回 false
qDebug() << __FUNCTION__ << ok;
// tmpFile.remove();
注意,这里setAutoRemove(false),特意将该属性设置为false,因为默认是自动删除的,设置 false 后不需要的时候可以手动remove.
运行结果:
Widget "/Users/lyy/QTemporaryFileTest_XXXXXX.txt"
Widget "/Users/lyy/QTemporaryFileTest_L32420.txt"
Widget false
当再次通过静态函数去创建文件的时候QTemporaryFile::createNativeFile,由于上面已经创建过该文件,所以返回 false。
点击领取Qt学习资料+视频教程~
链接:http://docs.qq.com/doc/DUlVwTW1FZlZuWE9G
猜你喜欢
- 2024-10-25 Java 17 NIO 知识点 Files 操作(java17课)
- 2024-10-25 PE格式:新建节并插入代码(怎么用pe创建新用户)
- 2024-10-25 入门Java不迷路!一篇教你搞懂Java 「File类」的概述和方法
- 2024-10-25 EndNote使用技巧(4)之七种方法导入文献?一文全搞定
- 2024-10-25 Vue+Element UI实现断点续传、分片上传、秒传
- 2024-10-25 共享数据资源,VBA代码导入已有文本数据文件的方法
- 2024-10-25 (12)文本文件操作参考(文本的基本操作)
- 2024-10-25 使用StreamWriter类的对文件创建写入
- 2024-10-25 大文件上传:秒传、断点续传、分片上传
- 2024-10-25 如何写出优雅的 JS 代码:变量和函数的正确写法
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)