Qt:QDir类

说明

QDir提供了访问目录及目录下内容的类。

QDir既可以用于访问文件系统,也可以用于访问Qt 资源系统(Qt's resource system.)。

Qt用 "/" 作为目录分隔符,此外,"/" 也是URL的路径分隔符。

QDir可以指向一个用相对路径或绝对路径指明的文件。绝对路径在不同系统下不同,Linux系统下,以文件分隔符"/"开始,如:"/home/user/Documents";在Windows系统下,以某个磁盘开始,如:"C:/Documents and Settings"。相对路径直接以目录名、文件名开头,指明一个相对于当前目录的路径,如:"images/landscape.png"。

我们可以用isRelative()和isAbsolute()来检查一个QDir是绝对还是相对的。调用makeAbsolute()可以将一个相对路径的QDir转换为绝对路径的QDir。

规范化路径:不含".."、"."、逻辑链接的路径(把这些简写的路径写全),绝对路径与相对路径中都可以含有这些路径。

逻辑链接:Linux系统中路径中的local代表根目录,如果根目录为usr,规范化路径中的local就会变成usr。1)导航与目录操作

1)导航与目录操作

①路径

目录路径可以通过path()获取,通过setPath()设置新路径,通过absolutePath()获取到某个目录的绝对路径。

目录名通过dirName()获取,不过如果QDir表示的是当前目录,那会返回一个 ".":

QDir("Documents/Letters/Applications").dirName() // "Applications"
QDir().dirName()                                 // "."

目录路径也可以通过cd()、cdUp()进行修改,就像在命令行窗口中执行的那些shell命令。调用cd()时,如果传入了某个存在的目录路径,那么这个QDir就实际代表了这个目录。而cdUp()则会改变该QDir到父目录。这样的话,cd( ".." )就相当于cdUp()。

②添加、删除、修改

目录通过mkdir()创造,通过rename()重命名,通过rmdir()移除。

③检查

通过exists()检查某个目录是否存在;目录的属性可以通过 isReadable(), isAbsolute(), isRelative(), 和 isRoot() 进行检查。

④重读某目录:refresh()

2)文件与目录的内容

①路径上的要素

目录路径上有一系列的要素:文件、目录、符号链接。要素的数量通过count()得到,它们的名字通过entryList()保存在一个QStringList中,如果我们需要每个要素的信息,可以通过entryInfoList()来获取一个QList<QFileInfo>。

②构造路径、移除

通过filePath()、absoluteFilePath()构造一个从QDir指定的目录到某个文件、目录的绝对路径与相对路径。不过它们都不会检查该路径是否存在,它们仅仅用于构造路径:

QDir directory("Documents/Letters");
QString path = directory.filePath("contents.txt");
QString absolutePath = directory.absoluteFilePath("contents.txt");

通过remove()移除文件,通过rmdir()移除目录。

③filter

在用entryList()与entryInfoList()获取要素时,可以引入过滤器来筛选符合要求的要素:例如筛选包含某子串的文件、分离文件与目录等:

名字filter通过QStringList传入setNameFilters()进行构建;

属性filter通过多个用OR连接的Filter进行构建,方法是setFilter();

排序顺序由setSorting()传入的一系列用OR(即 | )连接的SortFlags构建。

可以通过match()来检查某个文件名是否符合filter。

3)当前目录与其他路径

有两类static方法用于获取路径,一类返回QDir,一类返回QString:

QDir

QString

Return Value

current()

currentPath()


The application's working directory

home()

homePath()

The user's home directory

root()

rootPath()

The root directory

temp()

tempPath()

The system's temporary directory

可以用setCurrent()来设置程序的工作目录。如果我们想知道应用的可执行文件所在的目录,可以用QCoreApplication::applicationDirPath()。

drives()方法给出了该文件系统的所有根目录构成的List。在Unix系统中,返回一个包含单个"/"的List,它就是系统根目录。在Windows系统下,它会返回包含系统所有盘的QList<QFileInfo>。

4)路径操作与字符串

Path中如果包含元素 ".",说明是当前目录;包含"..",说明是parent目录;包含逻辑链接说明是规范目录,规范目录通过canonicalPath()构建。

通过cleanPath()可以简化path,移除path中多余的"/"与".."。

有时我们需要构造一些自制分隔符的路径,可以用toNativeSeparators()。

5)例子

①检查目录是否存在:exists()

QDir dir("example");
if (!dir.exists())qWarning("Cannot find the example directory");

也可以用QFile::exists()

②遍历目录、读取文件

QDir dir = QDir::root();                 // "/"
if (!dir.cd("tmp")) {                    // "/tmp"qWarning("Cannot find the \"/tmp\" directory");
} else {QFile file(dir.filePath("ex1.txt")); // "/tmp/ex1.txt"if (!file.open(QIODevice::ReadWrite))qWarning("Cannot create the file %s", file.name());
}

列出当前目录下的所有文件,按文件size从小到大排列:

#include <QDir>
#include <iostream>int main(int argc, char *argv[])
{QCoreApplication app(argc, argv);QDir dir;dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);dir.setSorting(QDir::Size | QDir::Reversed);QFileInfoList list = dir.entryInfoList();std::cout << "     Bytes Filename" << std::endl;for (int i = 0; i < list.size(); ++i) {QFileInfo fileInfo = list.at(i);std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10).arg(fileInfo.fileName()));std::cout << std::endl;}return 0;
}

1、模块和加载项

Header:

#include <QDir>

qmake:

QT += core

2、构造

QDir(QString path, QString nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)

用path构造QDir,nameFilter指定过滤的元素

QDir(QString path = QString())

构造QDir指向path,如果path为空,则程序工作目录"."会被使用

QDir(QDir dir)

另一个QDir的副本

3、静态字段

enum

Filter { Dirs, AllDirs, Files, Drives, NoSymLinks, …, CaseSensitive }

用于entryList() 和entryInfoList()中,描述了筛选选项。

flags

Filters

enum

SortFlag { Name, Time, Size, Type, Unsorted, …, LocaleAware }

用于entryList() 和entryInfoList()中的排序,按照 名字、大小、时间 等等排序

flags

SortFlags

4、静态方法

返回值类型

方法

说明

void

addSearchPath(QString prefix, QString path)

为path加前缀prefix

QString

cleanPath(QString path)

移除path中冗余的分隔符,"."和".."

QDir

current()

当前目录对应的QDir

QString

currentPath()

当前目录的绝对路径

QFileInfoList

drives()

系统根目录的list

QString

fromNativeSeparators(QString pathName)

用指定分隔符进行路径分割,默认用"/"

QDir

home()

home目录

QString

homePath()

home目录的路径

bool

isAbsolutePath(QString path)

是否为绝对路径

bool

isRelativePath(QString path)

是否为相对路径

QChar

listSeparator()

path分隔符:

Unix下是":"

Windows下是";"

bool

match(QString filter, QString fileName)

match(QStringList filters, QString fileName)

检查fileName是否符合filter的规则

QDir

root()

根目录QDir

QString

rootPath()

根目录路径

QStringList

searchPaths(QString prefix)

prefix的检索目录

QChar

separator()

目录分隔符:Unix中是"/";Windows中是"\"

bool

setCurrent(QString path)

设置当前工作目录

void

setSearchPaths(QString prefix, QStringList searchPaths)

给搜索路径searchPaths加前缀prefix

QDir

temp()

返回系统的临时目录QDir

QString

tempPath()

临时目录路径

QString

toNativeSeparators(QString pathName)

将pathName中的"/"分隔符转换系统分隔符,返回转换后的路径

5、实例方法

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Qt:文件系统浏览实例(QDir、QFileInfoList、QListWidgetItem)

前言&#xff1a; 文件系统的浏览是目录操作的一个常用功能&#xff0c;下面通过程序&#xff0c;实现一个能够显示所有文件的浏览功能。 讲一讲如何使用QDir类以及各种过滤方式显示文件列表。 效果图&#xff1a; 实现步骤&#xff1a; 1、新建工程 工程名默认即可&#x…

Qt 创建文件 用QFile和QDir类

项目需求是 根据日期创建多级子文件夹, 根目录保存 log.txt 控制台程序实现 如下执行结果 createFile 为程序目录 文档结构: 源码: #include <QtCore/QCoreApplication> #include <QDir> #include <QFile> #include <QDebug> #include <QDateTim…

手写一个webpack插件(plugin)

熟悉 vue 和 react 的小伙伴们都知道&#xff0c;在执行过程中会有各种生命周期钩子&#xff0c;其实webpack也不例外&#xff0c;在使用webpack的时候&#xff0c;我们有时候需要在 webpack 构建流程中引入自定义的行为&#xff0c;这个时候就可以在 hooks 钩子中添加自己的方…

Linux系统下imx6ull QT编程—— C++基础(一)

Linux QT编程 文章目录 Linux QT编程前言一、 C的输入输出方式1.cout语法形式2.cin语法形式3.C之命名空间 namespace 前言 学习 C的面向对象编程&#xff0c;对学习 Qt 有很大的帮助 一、 C的输入输出方式 效率上&#xff0c;肯定是 C 语言的 scanf 和 printf 的效率高&#…

Windows本地提权 · 上篇

目录 at 命令提权 sc 命令提权 ps 命令提权 利用的是windows的特性&#xff0c;权限继承&#xff0c;命令或者服务创建调用的时候会以system权限调用&#xff0c;那么这个命令或者服务的权限也是system。 进程迁移注入提权 pinjector进程注入 MSF进程注入 令牌窃取提权…

【Unity3D】调整屏幕亮度、饱和度、对比度

1 屏幕后处理流程 调整屏幕亮度、饱和度、对比度&#xff0c;需要使用到屏幕后处理技术。因此&#xff0c;本文将先介绍屏幕后处理流程&#xff0c;再介绍调整屏幕亮度、饱和度、对比度的实现。 屏幕后处理即&#xff1a;渲染完所有对象后&#xff0c;得到一张屏幕图像&#xf…

android装备选择,巫师三前期必拿装备武器_巫师三前期必拿最强装备推荐选择_攻略...

巫师三狂猎是巫师系列游戏的第三部&#xff0c;游戏是根据小说改编而来&#xff0c;既有小说的剧情又有精美逼真的游戏画面&#xff0c;曾获奖无数&#xff01;第三部的游戏剧情是讲主人公杰洛特(猎魔人)的最终冒险。游戏以战斗为主&#xff0c;并结合主线任务和支线任务&#…

哈利波特AR游戏-巫师联盟 深度解析

今年AR技术的进展&#xff0c;及相关应用值得我们关注。给大家推荐一个AR游戏&#xff0c;应该会超越Pokemon Go。 [ 哈利波特&#xff1a;巫师联盟 ] 这一天可能是魔法世界最重要的一天 AR游戏《哈利波特:巫师联盟》 于2019年6月20日正式上线。 全世界的哈利波特迷&#xff…

大地图开发管理:《巫师3》Umbra遮挡剔除技术

本演讲介绍巫师3使用Umbra实现的遮挡剔除技术。笔记略过了一些过于平凡的实现细节&#xff0c;包括流的加载&#xff0c;如何向Umbra提交数据&#xff1b;也略过了一半以上关于“游戏应当如何选择中间件”的讨论。Umbra 3Umbra是一个芬兰中间件公司&#xff0c;做出核心技术之后…

《巫师3:狂猎》4.01版更新 PC端已上线

去年12月&#xff0c;《巫师3》免费升级次世代版&#xff0c;加入DLSS 3支持&#xff0c;RTX 40系显卡的用户能直接提升体验感&#xff0c;RTX 30系用户能通过DLSS 2获得更稳定的帧数。 目前。《巫师3&#xff1a;狂猎》4.01版已更新上线&#xff0c;在PC、PlayStation 和 Xbo…

哈利波特3 阿兹卡班的囚徒

《哈利波特3阿兹卡班的囚徒》DVD国语配音高清收藏版《哈利波特3&#xff1a;阿兹卡班的囚徒》 片名&#xff1a;Harry Potter and the Prisoner of Azkaban 译名&#xff1a;哈利波特3&#xff1a;阿兹卡班的囚徒 导演&#xff1a;阿方索卡隆Alfonso Cuaron 主演&#xff1a;丹…

昆特牌显示无法连接至服务器,巫师之昆特牌总是显示无法连接网络

巫师之昆特牌这款游戏相信大家都不陌生吧&#xff0c;最近小编经常收到巫师之昆特牌总是显示无法连接网络问题的反馈&#xff0c;接下来小编就为大家提供几种常见的处理方案。 巫师之昆特牌游戏简介 《巫师之昆特牌》是由CD PROJEKT RED开发的一款卡牌类游戏。 游戏的主角是北方…

c语言谭浩强百草园有卖吗,巫师3白果园有什么神器

巫师3这款游戏中&#xff0c;装备对玩家是有一定的影响的&#xff0c;在白果园中隐藏着两个前期神器&#xff0c;是两件毒蛇学派的装备&#xff0c;在哪里呢&#xff0c;下面游戏吧小编为大家带来介绍。 巫师3白果园有什么神器 白果园神器指的是白果园中毒蛇学派的毒蛇钢剑和毒…

讯飞星火认知大模型与ChatGPT的对比分析

引言&#xff1a; 人工智能是当今科技领域的热门话题&#xff0c;自然语言处理是人工智能的重要分支。自然语言处理的目标是让计算机能够理解和生成自然语言&#xff0c;实现人机交互和智能服务。近年来&#xff0c;随着深度学习的发展&#xff0c;自然语言处理领域出现了许多创…

【数据结构6】二叉树的基本操作

文章目录 ⭐️写在前面的话⭐️二叉树的一些基本操作1、结构定义2、先序创建这棵树3、按满二叉树方式创建4、三种递归遍历5、层次遍历6、求二叉树的深度7、求叶子结点数8、三种非递归遍历9、先序线索化二叉树10、先序线索化后遍历11、中序线索化二叉树12、中序线索化后遍历主函…

C语言——每日一题

1.倒置字符串 倒置字符串 要将每一个单词逆序输出&#xff0c;首先可以将整个字符串内容都逆序输出&#xff0c;然后再将字符串中的每一个单词再进行逆序。 例如&#xff1a;逆序 i like beijing. 先逆序成&#xff1a;.gnijieb ekil i 再将每个单词逆序&#xff1a; beij…

Matlab实现曲线拟合的最小二乘法

实验条件 实验用例 x0102030405060708090y6867.166.465.664.661.861.060.860.460 实验要求 利用曲线拟合的线性最小二乘法求被逼近函数f(x)在点x55处的近似值&#xff0c;并画出实验数据和直线。 代码实现 X[0,10,20,30,40,50,60,70,80,90]; Y[68,67.1,66.4,65.6,64.6,61.…

达梦数据库8安装教程

第一步&#xff1a;双击驱动 注意&#xff1a;如果双击显示没有驱动&#xff0c;则安装WinCDEmu软件。 第二步&#xff1a;双击setup.exe安装包 第三步&#xff1a;选择时区 第四步&#xff1a;验证key文件 因为我们是免费试用&#xff0c;所以没有key文件&#xff0c;直接下一…

线性回归——最小二乘法

线性回归&#xff1a;自变量和因变量之间是线性关系&#xff0c;例如&#xff1a;h a0a1x1a2x2…anxn。线性回归预测的一般步骤&#xff1a;假设特征变量Xi满足线性关系&#xff0c;然后根据给定的训练数据训练出一个模型&#xff0c;最后通过此模型进行预测。线性回归的根本就…

最小二乘法多项式曲线拟合原理与实现(数学公式详细推导,代码方面详细注释)

最小二乘法概念&#xff1a; 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据&#xff0c;并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘…