QDir 类 -属性详解

2024-01-11 23:58
文章标签 详解 属性 qdir

本文主要是介绍QDir 类 -属性详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

    • 概述
    • 函数详解
      • 初始化
    • 目录信息
    • 操作目录
    • 程序目录和特殊目录
    • 路径相关
    • 所有函数
      • 初始化
      • 目录信息
      • 操作目录
      • 程序目录和特殊目录
      • 路径相关
      • 其他
    • 示例
      • 按照时间顺序遍历指定路径下的文件下的所有*.bmp格式的图片:
      • 删除指定路径下的指定文件:


概述

我们知道 QFileInfo 类是文件信息类,其用法参考《QFileInfo 类 - 文件信息类》。那么本文讲解目录信息类 QDir,用于获取有关目录的信息

函数详解

初始化

构造函数QDir(const QDir &dir)QDir(const QString &path = QString())QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
指定目录QString path() constvoid setPath(const QString &path)
指定名称过滤器QStringList nameFilters() constvoid setNameFilters(const QStringList &nameFilters)
指定排序QDir::SortFlags sorting() constvoid setSorting(QDir::SortFlags      sort)
指定类型过滤器QDir::Filters filter() constvoid setFilter(QDir::Filters filters)[static]bool match(const QString &filter, const QString &fileName)[static]bool match(const QStringList &filters, const QString &fileName)

要了解 QDir 类,首先肯定是这个类的构建方法。一般就是把目录地址传给构造函数即可,但这里我们来讲下第三个构造函数中各参数的意义。一共4各参数,分别为 path(路径信息)、nameFilter(名称过滤)、sort(排序规则)、filters(类型过滤)。

关于名称过滤,首先要知道生活中我们用过滤和屏蔽来筛选结果,而设置了过滤就意味着谁能通过。既然 QDir 类是目录信息类,那我肯定要知道该目录下有哪些文件、文件夹,所以在这里设置好后在调用 entryList()、entryInfoList() 时就会只显示你设置的过滤词。例如我设置了“*.cpp”".h",那么调用 entryList() 后只返回扩展名为 cpp 和 h 的文件,其他都不显示。
关于排序规则,也是指定了返回目录信息的先后顺序,有的按名称排序,有的按时间排序,具体排序规则参看下图。可以组合起来用。

在这里插入图片描述
关于类型过滤,作用和名称过滤是类似的,只不过是按照类型来过滤,具体类型如下图。
在这里插入图片描述
关于 match(),两个静态函数可以判断 fileName 是否符合 filter 规则,其中 filter 是通配符表达式

目录信息

目录名称QString dirName() const
是否存在bool exists() constbool exists(const QString &name) const
判断bool isAbsolute() const[static]bool isAbsolutePath(const QString &path)bool isRelative() const[static]bool isRelativePath(const QString &path)bool isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) constbool isRoot() constbool isReadable() const
目录内容uint count() constQStringList entryList(......) constQFileInfoList entryInfoList(...) const
目录中的文件路径QString filePath(const QString &fileName) constQString absoluteFilePath(const QString &fileName) constQString relativeFilePath(const QString &fileName) const

关于 dirName(),就是返回目录的名称,比如 QDir("/home/project"),那么返回值就是“project”。

关于 isAbsolute() 和 isAbsolutePath(),这两个函数的效果是一样的,区别在于是否是静态函数。同理,isRelative() 和 isRelativePath() 也是一样的。

关于 isEmpty(),就是判断目录中是否有文件或者文件夹。当然在 Linux 系统中,任何一个目录都是有‘.’和‘…’的,所以根据需要设定好 filters。

操作目录

创建bool mkdir(const QString &dirName) constbool mkpath(const QString &dirPath) const
重命名bool rename(const QString &oldName, const QString &newName)
删除 删除目录:bool rmdir(const QString &dirName) const删除路径:bool rmpath(const QString &dirPath) const删除文件:bool remove(const QString &fileName)全部删除:bool removeRecursively()
更改bool cd(const QString &dirName)bool cdUp()

关于创建目录,mkdir() 就直接在执行程序所在目录中创建一个子目录,只有一个哦。而 mkpath() 创建的目录,其父目录们也会被创建。举个例子,我要在当前目录下创建一个 folderA 目录,在 其中再创建一个 folderB 目录。如果用 mkdir() 就需要写两遍,而用 mkpath() 只需要执行 mkpath(“folderA/folderB”) 即可。

程序目录和特殊目录

程序目录 [static]QDir current()[static]QString currentPath()[static]bool setCurrent(const QString &path)
特殊目录系统根目录列表[static]QFileInfoList drives()根目录根目录:[static]QDir root()根路径:[static]QString rootPath()临时目录[static]QDir temp()[static]QString tempPath()系统主目录[static]QDir home()[static]QString homePath()

关于程序目录,三个函数都是获取可执行程序所在的目录,而不是 QDir 中的目录。

关于 drives(),这个静态函数可了不得,能获得电脑里所有的盘符,比如“C:\”、“D:\”。Linux 只会返回个“/”。

路径相关

绝对路径:QString absolutePath() const
转成绝对路径:bool makeAbsolute()
规范路径:QString canonicalPath() const
搜索前缀功能获取:[static]QStringList searchPaths(const QString &prefix)增加:[static]void addSearchPath(const QString &prefix, const QString &path)设置:void setSearchPaths(const QString &prefix, const QStringList &searchPaths)
分隔符[static]QChar separator()[static]QChar listSeparator()[static]QString toNativeSeparators(const QString &pathName)[static]QString fromNativeSeparators(const QString &pathName)
清除前缀路径:[static]QString cleanPath(const QString &path)

关于“搜索前缀”功能,自从 Qt 4.3 引入以来,我相信用这个功能的人是极少的。这个功能其实很强大,它是干吗用的呢?这样说吧,假如某个类型的文件都在一个目录存放,而这个目录的绝对路径特别长,此时用“搜索前缀”功能就会方便很多。举个例子,QDir::setSearchPaths(“doc”, “c:/My Documents”),这样的一句话表明“c:/My Documents”可以用“doc”来替换。那么我要用的时候可以这样:QFile file(“docs:test.txt”),展开来就是“c:/My Documents/test.txt”。

关于分隔符,我们知道 Windows 下是‘\’而 Linux 下是‘/’,separator() 就是用来返回分隔符用的。listSeparator() 同样在 Windows 下是‘;’而 Linux 下是‘:’。剩下的 toNativeSeparators() 和 fromNativeSeparators() 两个函数也是处理分隔符的,我们的 Qt 在写路径的时候统一用‘/’,但想转成 Windows 下的‘\’就可以用 to… 函数

void Q_CLEANUP_RESOURCE(name)
void Q_INIT_RESOURCE(name)
有人很好奇,为啥资源系统相关的宏会在 QDir 里出现,其实这和上文的“搜索前缀”功能类似。因为我们用 Qt 资源系统时都是“:/image/main.png”这种样子的,它既不是绝对路径也不是相对路径。但是‘😕’就可以在资源文件中搜索到我们需要的图片。

关于 Q_INIT_RESOURCE(),就是将 .qrc 文件添加到搜索路径中。调用该宏后,一般程序启动会自动加载 .qrc 文件,但对于静态库中的资源,需要手动写上该宏。例如资源文件叫 myapp.qrc,那么使用宏就是 Q_INIT_RESOURCE(myapp)。

关于 Q_CLEANUP_RESOURCE(),程序结束后自动卸载资源文件,但养成好习惯,程序结束前调用该宏可以保证某些平台的正常运行。

所有函数

初始化

构造函数
QDir(const QDir &dir)
QDir(const QString &path = QString())
QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
指定目录
QString path() const
void setPath(const QString &path)
指定名称过滤器
QStringList nameFilters() const
void setNameFilters(const QStringList &nameFilters)
指定排序
QDir::SortFlags sorting() const
void setSorting(QDir::SortFlags sort)
指定类型过滤器
QDir::Filters filter() const
void setFilter(QDir::Filters filters)
[static]bool match(const QString &filter, const QString &fileName)
[static]bool match(const QStringList &filters, const QString &fileName)

目录信息

目录名称
QString dirName() const
是否存在
bool exists() const
bool exists(const QString &name) const
判断
bool isAbsolute() const
[static]bool isAbsolutePath(const QString &path)
bool isRelative() const
[static]bool isRelativePath(const QString &path)
bool isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const
bool isRoot() const
bool isReadable() const
目录内容
uint count() const
QStringList entryList(......) const
QFileInfoList entryInfoList(...) const
目录中的文件路径
QString filePath(const QString &fileName) const
QString absoluteFilePath(const QString &fileName) const
QString relativeFilePath(const QString &fileName) const

操作目录

创建
bool mkdir(const QString &dirName) const
bool mkpath(const QString &dirPath) const
重命名
bool rename(const QString &oldName, const QString &newName)
删除
删除目录:bool rmdir(const QString &dirName) const
删除路径:bool rmpath(const QString &dirPath) const
删除文件:bool remove(const QString &fileName)
全部删除:bool removeRecursively()
更改
bool cd(const QString &dirName)
bool cdUp()

程序目录和特殊目录

程序目录
[static]QDir current()
[static]QString currentPath()
[static]bool setCurrent(const QString &path)
特殊目录
系统根目录列表
[static]QFileInfoList drives()
根目录
根目录:[static]QDir root()
根路径:[static]QString rootPath()
临时目录
[static]QDir temp()
[static]QString tempPath()
系统主目录
[static]QDir home()
[static]QString homePath()

路径相关

绝对路径:QString absolutePath() const
转成绝对路径:bool makeAbsolute()
规范路径:QString canonicalPath() const
搜索前缀功能
获取:[static]QStringList searchPaths(const QString &prefix)
增加:[static]void addSearchPath(const QString &prefix, const QString &path)
设置:void setSearchPaths(const QString &prefix, const QStringList &searchPaths)
分隔符
[static]QChar separator()
[static]QChar listSeparator()
[static]QString toNativeSeparators(const QString &pathName)
[static]QString fromNativeSeparators(const QString &pathName)
清除前缀路径:[static]QString cleanPath(const QString &path)

其他

交换:void swap(QDir &other)
刷新:void refresh() const

void Q_CLEANUP_RESOURCE(name)
void Q_INIT_RESOURCE(name)

示例

按照时间顺序遍历指定路径下的文件下的所有*.bmp格式的图片:

void GetDirAllImage::lookUpAllFile()
{QString filterExtension;  //用于存放文件扩展名/* 创建需要遍历目录的QDir */QDir fileDir("F:/UI/myqml/SavePicturePath");/* 设置过滤配置,只匹配文件 */fileDir.setFilter(QDir::Files);QStringList filters;filters << "*.bmp";/* 返回目录中所有文件和目录的QFileInfo对象列表 */QFileInfoList fileInfoList = fileDir.entryInfoList(filters,QDir::AllEntries,QDir::Time);  //文件按格式*.bmp过滤,所有路径作为入口,文件按时间顺序排列fileNumber = fileInfoList.length();bmp_filePath_name.clear();
#if 0QFileInfo &fileInfo_a = fileInfoList[0];QDir fileDir_a = fileInfo_a.dir();QString filePath_a = fileInfo_a.path();QString filePath_name = fileInfo_a.filePath();
#endif//qDebug() <<"fileDir_a:"<< fileDir_a;//qDebug() <<"filePath_a:"<< filePath_a;//qDebug() <<"filePath_name:"<< filePath_name;  //ok//string filePath_name2 = "file:///"+filePath_name.toStdString();//cout <<"filePath_name2:"<< filePath_name2 << endl;  //ok// string filePath_name2[fileNumber];int ix=0;//qDebug() <<fileNumber;foreach(const QFileInfo &fileInfo, fileInfoList){
/*filterExtension = fileInfo.suffix();    //获取后缀名if( filterExtension != "bmp")           //如果后缀名不为bmp,直接过滤掉{continue;}
*/
#if 0QString fileName = fileInfo.fileName(); /* 文件名字 */qint64 size = fileInfo.size(); /* 文件大小 */QDateTime dateTime = fileInfo.fileTime(QFileDevice::FileBirthTime); /* 创建日期 */QFile::Permissions permissions = fileInfo.permissions(); /* 权限 */QDir fileDir = fileInfo.dir();QString filePath = fileInfo.path();
#endif//qDebug() <<"fileDir:"<< fileDir;//qDebug() <<"filePath:"<< filePath;//qDebug() <<fileNumber << fileName << size << dateTime << permissions;QString filePath_name = fileInfo.filePath();bmp_filePath_name.append("file:///"+filePath_name);  //QStringList bmp_filePath_name,此处为QString类型数组添加数组单元内容//bmp_filePath_name <<"file:///"+filePath_name;  //bmp_filePath_name <<"file:///"+filePath_name;等效于bmp_filePath_name.append("file:///"+filePath_name);//qDebug() <<"bmp_filePath_name.length:"<<bmp_filePath_name.length() << endl;qDebug() <<"filePath_name2["<<ix<<"]:"<<bmp_filePath_name[ix] << endl;ix++;}emit callpictureListRefesh();  //通知浏览界面进行实时刷新当前照片到页面
}QStringList GetDirAllImage::bmp_filePath_name_list()
{return  bmp_filePath_name;
}

删除指定路径下的指定文件:

/** 通过文件名称删除文件*
*/
bool GetDirAllImage::deleteFileOrFolder(const QString &strPathP)//要删除的文件夹或文件的路径
{QString strPath = strPathP;strPath = strPath.replace("file:///","");  //QString 去掉前面"file:///"字符串qDebug() <<"strPath()" <<strPath << endl;if (strPath.isEmpty() || !QDir().exists(strPath))//是否传入了空的路径||路径是否存在{qDebug() <<"rempove file not exist" << endl;return false;}QFileInfo FileInfo(strPath);if (FileInfo.isFile())//如果是文件QFile::remove(strPath);else if (FileInfo.isDir())//如果是文件夹{QDir qDir(strPath);qDir.removeRecursively();}lookUpAllFile(); //重新遍历剩余的图片return true;
}

这篇关于QDir 类 -属性详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/596138

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四