QTemporaryDir及QTemporaryFile建立临时目录及文件夹(创建一个随机名称的目录或文件,两者均能保证不会覆盖已有文件)
本文标题:QTemporaryDir及QTemporaryFile建立临时目录及文件夹 本文地址:http://techieliang.com/2017/12/672/
介绍
还是老套路,上官方文档地址:QTemporaryDir、QTemporaryFile
两者都是在构造时创建一个随机名称的目录或文件,并在其销毁时自动删除对应的目录和文件,同时两者均能保证不会覆盖已有文件。
实例化时若不传递参数则随机确定名称,若传入名称会优先尝试指定名称若此名称已存在文件则会随机创建。
file的父类是QFile,可以进行QFile的所有操作。
但要注意Dir的父类只是QObject并不是QDir,也很正常,毕竟只是个临时文件夹不需要其他操作。
QTemporaryDir
接口说明
- QTemporaryDir()
- QTemporaryDir(const QString &templatePath)
- ~QTemporaryDir()
- bool autoRemove() const
- QString errorString() const
- QString filePath(const QString &fileName) const
- bool isValid() const
- QString path() const
- bool remove()
- void setAutoRemove(bool b)
注意构造函数说明,支持相对路径:
If templatePath is a relative path, the path will be relative to the current working directory.
同时注意对于路径末尾字符的说明,文件夹路径会直接在指定路径之后添加随机字符,如果指定路径最后不是/则为指定名称+XXX构成新路径名,如果最后是/则在前面的路径后新建一个随机目录,注意此时必须保证前面的文件夹都存在否则出错,见后面的范例:
If the templatePath ends with XXXXXX it will be used as the dynamic portion of the directory name, otherwise it will be appended. Unlike QTemporaryFile, XXXXXX in the middle of the template string is not supported.
remove可以主动提前删除目录,注意会删除目录下所有文件,毕竟是临时目录不要存有用的东西
Removes the temporary directory, including all its contents.
autoremove默认是true
最后,filePath可以获取文件的路径名,这个比较特殊,需要传入一个文件名,此函数返回一个完整的路径名。这样可以用于后续的QTemporaryFile。
范例
- #include <QCoreApplication>
- #include <QDebug>
- #include <QTemporaryFile>
- #include <QTemporaryDir>
- int main(int argc, char *argv[]) {
- QCoreApplication a(argc,argv);
- QTemporaryDir testdir1;
- qDebug()<<testdir1.autoRemove();
- qDebug()<<testdir1.filePath("123.txt");
- QTemporaryDir testdir2("testdir2");
- qDebug()<<testdir2.autoRemove();
- qDebug()<<testdir2.filePath("123.txt");
- QTemporaryDir testdir3("testdir3/");
- //注意这样等于是指定在当前运行目录下的testdir3目录下建立一个随机名称的目录
- //如果testdir3文件夹不存在将会出错
- qDebug()<<testdir3.autoRemove();
- qDebug()<<testdir3.filePath("123.txt");
- return 0;
- }
结果
- true
- "C:/Users/XXXXXX/AppData/Local/Temp/untitled-GN2aKw/123.txt"
- true
- "testdir2bE7tFd/123.txt"
- true
- "testdir3/zxPK5t/123.txt"
XXXXXX是当前系统登录的用户名,也就是默认目录自动指向了系统默认的临时文件地址。
最后的testdir3目录下建立临时目录,最后删除的只是临时目录及其下所有文件,并不会删除testdir3文件夹
QTemporaryFile
接口说明
- QTemporaryFile()
- QTemporaryFile(const QString &templateName)
- QTemporaryFile(QObject *parent)
- QTemporaryFile(const QString &templateName, QObject *parent)
- ~QTemporaryFile()
- bool autoRemove() const
- QString fileTemplate() const
- bool open()
- void setAutoRemove(bool b)
- void setFileTemplate(const QString &name)
构造函数可以传入一个临时文件名,这个名称就可以用QTemporaryDir::filePath实现在临时目录建立一个指定文件名的临时文件。(如果这个文件已经存在那么还是会建立一个随机名称的)
fileTemplate是文件名,临时文件的实现原理是文件名后面加上一个”.XXX”随机名称,所以前面的文件名可以随机指定
范例
- #include <QCoreApplication>
- #include <QDebug>
- #include <QTemporaryFile>
- #include <QTemporaryDir>
- int main(int argc, char *argv[]) {
- QCoreApplication a(argc,argv);
- QTemporaryFile testfile1;//建立第一个文件
- qDebug()<<"testfile1"<<testfile1.fileName()
- <<testfile1.fileTemplate();
- //第一次open之前文件是没有建立的,所以没名字
- testfile1.open();
- testfile1.close();
- qDebug()<<"testfile1"<<testfile1.fileName()
- <<testfile1.fileTemplate();
- //只要对象不被销毁,可以重复open,不会变文件
- testfile1.open();
- qDebug()<<"testfile1"<<testfile1.fileName()
- <<testfile1.fileTemplate();
- //指定名字
- QTemporaryFile testfile2("testfile2");
- testfile2.open();
- qDebug()<<"testfile2"<<testfile2.fileName()
- <<testfile2.fileTemplate();
- //建立一个重名的
- QTemporaryFile testfile3("testfile2");
- testfile3.open();
- qDebug()<<"testfile3"<<testfile3.fileName()
- <<testfile3.fileTemplate();
- //在QTemporaryDir临时目录下建立一个
- QTemporaryDir testdir1;
- qDebug()<<"testdir1"<<testdir1.filePath("testfile4.txt");
- QTemporaryFile testfile4(testdir1.filePath("testfile4.txt"));
- testfile4.open();
- qDebug()<<"testfile4"<<testfile4.fileName()
- <<testfile4.fileTemplate();
- //注意最后一个就算文件名定义了txt后缀,夜壶自动在后面加.xxxxxx
- //QTemporaryFile继承了QFile,在open以后可以直接进行QFile的所有操作
- return 0;
- }
结果
- testfile1 "" "C:/Users/XXXXX/AppData/Local/Temp/untitled.XXXXXX"
- testfile1 "C:/Users/XXXXX/AppData/Local/Temp/untitled.Hp9316" "C:/Users/zhouliang/AppData/Local/Temp/untitled.XXXXXX"
- testfile1 "C:/Users/XXXXX/AppData/Local/Temp/untitled.Hp9316" "C:/Users/zhouliang/AppData/Local/Temp/untitled.XXXXXX"
- testfile2 "D:/my_program_design/untitled/build-untitled-Desktop_Qt_5_9_2_MinGW_32bit-Debug/testfile2.gq9316" "testfile2"
- testfile3 "D:/my_program_design/untitled/build-untitled-Desktop_Qt_5_9_2_MinGW_32bit-Debug/testfile2.Uh9316" "testfile2"
- testdir1 "C:/Users/XXXXX/AppData/Local/Temp/untitled-i9GN2a/testfile4.txt"
- testfile4 "C:/Users/XXXXX/AppData/Local/Temp/untitled-i9GN2a/testfile4.txt.lY9316" "C:/Users/zhouliang/AppData/Local/Temp/untitled-i9GN2a/testfile4.txt"
file的父类是QFile,可以进行QFile的所有操作。上述范例没有演示读写操作。
http://techieliang.com/2017/12/672/
QTemporaryDir及QTemporaryFile建立临时目录及文件夹(创建一个随机名称的目录或文件,两者均能保证不会覆盖已有文件)的更多相关文章
- QTemporaryDir及QTemporaryFile建立临时目录及文件夹
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QTemporaryDir及QTemporaryFile建立临时目录及文件夹 本文地址 ...
- Windows服务器Pyton辅助运维--01.自动Copy文件(文件夹)到远程服务器所在目录
Windows服务器Pyton辅助运维 01.自动Copy文件(文件夹)到远程服务器所在目录 开发环境: u Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u ...
- 如何将指定文件或文件夹直接提交到svn指定目录?
如何将指定文件或文件夹直接提交到svn指定目录? 一般我们都是按以下步骤操作的: 1.先将那个目录checkout下来 2.将要添加的文件或者文件夹放到这个目录中 3.右击文件执行svn菜单中的add ...
- Linux_文件及文件夹[创建][复制][移动][删除][重命名]
一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语 法: touch [-acfm][-d <日期时间>][-r <参考文件或目 录&g ...
- C#文件和文件文件夹按时间、名称排序-顺序与倒序
对于文件和文件夹有多种排序方式,常用的就是按创建或修改时间.按文件名排序.在 C# 中,按时间和文件名排序都十分简单,用数组提供的排序方法 Array.Sort() 一行代码就可以搞定,当然也可以用常 ...
- 个人永久性免费-Excel催化剂功能第17波-批量文件改名、下载、文件夹创建等
前几天某个网友向我提出催化剂的图片功能是否可以增加导出图片功能,这个功能我一直想不明白为何有必要,图片直接在电脑里设个文件夹维护着不就可以了么?何苦还要把Excel上的图片又重新导出到文件夹中?这个让 ...
- Java 基础【13】 文件(文件夹) 创建和删除
使用 java.io.file 创建文件(文件夹),算是 java 最基础的知识,但实战项目中还是需要知晓细节. 比如 File 类中的 mkdir() 和 mkdirs() 的区别. JDK API ...
- 禁止输出重定向(>)覆盖已存在文件(防止误操作)
在输出重定向中,>表示重定向并覆盖已有文件内容,为了防止误操作,覆盖重要的内容,可以使用如下命令: set -C 这样输出重定向到一个已有文件就会提示: cannot overwrite exi ...
- Java 基础【16】 文件(文件夹) 创建和删除
使用 java.io.file 创建文件(文件夹),算是 java 最基础的知识,但实战项目中还是需要知晓细节. 比如 File 类中的 mkdir() 和 mkdirs() 的区别. JDK API ...
随机推荐
- [USACO15JAN]草鉴定Grass Cownoisseur(分层图+tarjan)
[USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of his cows ...
- C++模板中重要的术语
- 在启动php时,无法启动此程序,由于计算机中丢失MSVCR110.dll的解决方法
在启动php时,运行RunHiddenconsole.exe php-cgi.exe -b 127.0.0.1:9000 -c时,出现错误:无法启动此程序,由于计算机中丢失MSVCR110.dll 方 ...
- C++刷题——2802: 推断字符串是否为回文
Description 编敲代码,推断输入的一个字符串是否为回文. 若是则输出"Yes".否则输出"No". 所谓回文是指順读和倒读都是一样的字符串. Inpu ...
- python 写了一个批量拉取文件进excel文档
路径如: C:\\Users\\huaqi\\Desktop\\信息收集 “信息收集”目录下有以下子目录:[技术,客服,运营,行政] “技术”目录下有以下子文件:[小白.txt,小红.txt,小黑.t ...
- 洛谷P2415 集合求和
题目描述 给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 ...
- P2038 无线网络发射器选址
题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...
- 轻量级记事本工具:CintaNotes
本片文章介绍CintaNotes小工具 功能介绍: 方便.快捷的记录笔记: 快捷地从任何地方等截取内容生成笔记: 高效的记事本内容查询: 轻松的标签管理 支持移动设备和电脑同步(估计要收费) 官网下载 ...
- drbd脑裂
环境: Primary 节点:node1Secondary 节点:node2 DRBD产生脑裂的原因: (1. 采用HA环境的时候自动切换导致脑裂; (2. 人为操作或配置失误,导 ...
- Aix下查看内存命令
1. 查看物理内存配置 # lsdev -Cc memory 查看配置的物理内存设备,下面为其输出示例: L2cache0 Available L2 Cache mem0 Available ...