一、描述

QDir 用于操作路径名、访问有关路径和文件的信息、操作底层文件系统。它也可以用来访问 Qt 的资源系统。

Qt 使用“/”作为通用目录分隔符。如果总是使用“/”作为目录分隔符,Qt 将转换路径以符合底层操作系统。

QDir 可以使用相对或绝对路径指向文件。

  • 绝对路径以目录分隔符开头(在 Windows 下可选地以驱动器规范开头)。
  • 相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。

绝对路径的示例:

QDir("/home/user/Documents")
QDir("C:/Documents and Settings")

在 Windows 上,当用于访问文件时,上面的第二个示例将转换为 C:\Documents and Settings。

相对路径示例:

QDir("images/landscape.png")

以冒号 (:) 开头的路径始终被视为绝对路径,因为它们表示 QResource

二、类型成员

1、enum QDir::Filter:此枚举描述了 QDir 可用的过滤选项。例如用于 entryList() 和 entryInfoList()。过滤器值是通过使用按位 OR 运算符组合以下值来指定的:

  • Dirs:列出与过滤器匹配的目录。
  • AllDirs:列出所有目录。
  • Files:列出文件。
  • Drives:列出磁盘驱动器(在 Unix 下被忽略)。
  • NoSymLinks:不列出符号链接(被不支持符号链接的操作系统忽略)。
  • NoDotAndDotDot:不列出特殊条目“.””..”
  • NoDot:不列出特殊条目“.”
  • NoDotDot:不列出特殊条目“..”
  • AllEntries:列出目录、文件、驱动器和符号链接。
  • Readable:列出应用程序具有读取权限的文件(应用程序可以读取它)。此值需要与 DirsFiles 结合使用。
  • Writable:列出应用程序对其具有写入权限的文件。 此值需要与 DirsFiles 结合使用。
  • Executable:列出应用程序对其具有执行权限的文件。此值需要与 DirsFiles 结合使用。
  • Modified:仅列出已修改的文件(在 Unix 上忽略)。
  • Hidden:列出隐藏文件(在 Unix 上,文件以“.”开头)。
  • System:列出系统文件(在 Unix 上,包括 FIFO、套接字和设备文件;在 Windows 上,包括 .lnk 文件)
  • CaseSensitive:过滤器应区分大小写。

2、enum QDir::SortFlag:这个枚举描述了 QDir 可用的排序选项,例如用于 entryList() 和 entryInfoList()。排序值由以下值通过 OR 运算指定:

  • Name:按名称排序。
  • Time:按时间排序(修改时间)。
  • Size:按文件大小排序。
  • Type:按文件类型(扩展名)排序。
  • Unsorted:不排序。
  • NoSort:默认不排序。
  • DirsFirst:先目录后文件。
  • DirsLast:先文件后目录。
  • Reversed:反转排序顺序。
  • IgnoreCase:不区分大小写排序。
  • LocaleAware:使用当前区域设置(QLocale)适当地对项目进行排序。

三、成员函数

3.1、静态成员函数

1、QString cleanPath(const QString &path)

返回目录分隔符标准化的路径(即平台原生分隔符转换为“/”)并删除多余的分隔符,并尽可能解析“.”“..”

2、QDir current()

返回应用程序的当前目录。

该目录是使用当前目录的绝对路径构建的,确保其 path() 将与其 absolutePath() 相同。

3、QString currentPath()

返回应用程序当前目录的绝对路径。

当前目录是使用 是父进程启动此应用程序的目录或者 setCurrent() 设置的最后一个目录。

4、QFileInfoList drives()

返回此系统上的根目录列表。

在 Windows 上,返回一个包含“C:/”、“D:/”等的 QFileInfo 对象列表。

在其他操作系统上,返回一个只包含一个根目录(即“/”)的列表。

5、QString fromNativeSeparators(const QString &pathName)

使用“/”作为文件分隔符返回 pathName。

    qDebug()<< QDir::fromNativeSeparators("c:\\winnt\\system32");//"c:/winnt/system32"

例如,在 Windows 上,fromNativeSeparators("c:\\winnt\\system32") 返回 "c:/winnt/system32"。
返回的字符串可能与某些操作系统上的参数相同,例如在 Unix 上。

6、QDir home()

返回用户的主目录。

该目录是使用主目录的绝对路径构建的,确保其 path() 与其 absolutePath() 相同。

7、QString homePath()

返回用户主目录的绝对路径。

在 Windows 下,此函数将返回当前用户配置文件的目录。

C:/Documents and Settings/Username

8、bool isAbsolutePath(const QString &path)

path是否绝对路径。

注意:以冒号 (:) 开头的路径始终被视为绝对路径,因为它们表示 QResource

9、bool isRelativePath(const QString &path)

路径是否相对路径。

注意:以冒号 (:) 开头的路径始终被视为绝对路径,因为它们表示 QResource

10、QChar listSeparator()

返回本地路径列表分隔符。Unix:':';Windows:';'

11、QDir root()

返回根目录。

12、QString rootPath()

返回根目录的绝对路径。Unix 操作系统将返回“/”。Windows 系统通常返回“c:/”

13、QChar separator()

返回本机目录分隔符:Unix 下的“/”和 Windows 下的“\”

14、void setSearchPaths(const QString &prefix, const QStringList &searchPaths)

设置前缀的搜索路径。Qt 使用此搜索路径来定位具有已知前缀的文件。

要为文件名指定前缀,请在前缀后跟一个冒号。前缀只能包含字母或数字(例如,它不能包含冒号或斜线)。前缀必须至少有 2 个字符长,以避免与 Windows 驱动器号发生冲突。

QDir::setSearchPaths("icons", QStringList(QDir::homePath() + "/images"));
QDir::setSearchPaths("docs", QStringList(":/embeddedDocuments"));QPixmap pixmap("icons:undo.png"); //将到 QDir::homePath() + "/images" 文件夹搜索 undo.png
QFile file("docs:design.odf"); //将到 :/embeddedDocuments资源路径搜索 design.odf
    QDir::setSearchPaths("jpg",QStringList("D:/测试"));qDebug()<<QFile::exists("jpg:5.jpg");

15、QDir temp()

返回系统的临时目录。

16、QString tempPath()

返回系统临时目录的规范绝对路径。

  • 在 Unix/Linux 系统上,这是 TMPDIR 环境变量或 /tmp(如果 TMPDIR 未定义)中的路径。
  • 在 Windows 上,这通常是 TEMP 或 TMP 环境变量中的路径。

17、QString toNativeSeparators(const QString &pathName)

将参数中的路径“/”分隔符转换为适用于底层操作系统的分隔符。

如在 Windows 上,toNativeSeparators("c:/winnt/system32") 返回 "c:\winnt\system32"。

3.2、非静态成员函数

1、QDir(const std::filesystem::path &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)

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

构造一个带有路径 path 的 QDir,它使用 nameFilter 按名称过滤其条目,并使用过滤器按属性过滤。 它还使用 sort 对名称进行排序。

默认的 nameFilter 是一个空字符串,不排除任何内容; 默认过滤器是 AllEntries,它也不排除任何内容。 默认排序为名称 | IgnoreCase,即按名称排序,不区分大小写。

如果路径为空,QDir 使用“.” (当前目录)。 如果 nameFilter 是一个空字符串,QDir 使用名称过滤器“*”(所有文件)。

C++17 新增功能 std::filesystem

QDir(const std::filesystem::path &path)

QDir(const QString &path = QString())

构造一个指向给定目录路径的 QDir。如果路径为空,则使用程序的工作目录(“.”)。

2、QString absoluteFilePath(const QString &fileName)

返回目录中文件的绝对路径名。不检查文件是否确实存在于目录中。

3、QString absolutePath()

返回绝对路径。

std::filesystem::path filesystemAbsolutePath()

absolutePath() 作为 std::filesystem::path 返回。

    QDir dir;dir.setPath("D:/text");std::filesystem::path path = dir.filesystemAbsolutePath();qDebug()<<path.string().c_str();

4、QString canonicalPath()

返回规范路径,即没有符号链接或冗余“.”、“..”的路径。

在没有符号链接的系统上,此函数将始终返回与 absolutePath() 返回的字符串相同。

std::filesystem::path filesystemCanonicalPath()

canonicalPath() 作为 std::filesystem::path 返回。

5、bool cd(const QString &dirName)

将 QDir 的目录更改为 dirName。返回新目录是否存。

如果新目录不存在,则不会执行逻辑 cd() 操作。

调用 cd("..") 等同于调用 cdUp()。

6、bool cdUp()

通过从 QDir 的当前目录向上移动一个目录来更改目录。返回新目录是否存在。

如果新目录不存在,则不会执行逻辑 cdUp() 操作。

7、uint count()

返回目录中目录和文件的总数。等效于 entryList().count()。

8、QString dirName()

返回目录名称。例如路径 “/var/spool/mail” 的名称是“mail”。

不进行检查以确保具有此名称的目录确实存在。

9、QFileInfoList entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort)

QFileInfoList entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort)

返回目录中所有文件和目录的 QFileInfo 对象列表,根据使用 setNameFilters() 和 setFilter() 设置的名称和属性过滤器排序,并根据使用 setSorting() 设置的标志进行排序。

可以使用 nameFilters、filters 和 sort 参数覆盖名称过滤器、文件属性过滤器和排序规范。

10、QStringList entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort)

QStringList entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort)

返回目录中所有文件和目录的名称列表,根据使用 setNameFilters() 和 setFilter() 设置的名称和属性过滤器排序,并根据使用 setSorting() 设置的标志进行排序。

可以使用 nameFilters、filters 和 sort 参数覆盖名称过滤器、文件属性过滤器和排序规范。

11、bool exists(const QString &name)

  • name 包含文件绝对路径,文件是否存在。
  • name 不包含文件绝对路径,目录是否存在。

bool exists()

目录(不是文件)是否存在则返回真。

12、QString filePath(const QString &fileName)

返回目录中文件的路径名。不检查文件是否确实存在于目录中。

如果 QDir 是相对路径的,则返回的路径名也将是相对的。

13、QString path()

返回路径。可能包含符号链接,但不包含多余的“.”、“..”或多个分隔符。

返回的路径可以是绝对的或相对的。

std::filesystem::path filesystemPath()

path() 作为 std::filesystem::path 返回。

14、bool isAbsolute()

目录的路径是否绝对路径。

注意:以冒号 (:) 开头的路径始终被视为绝对路径,因为它们表示 QResource

15、bool isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot))

返回目录是否为空。

16、bool isReadable()

目录是否可读并且可以按名称打开文件。

17、bool isRelative()

目录路径是否是相对的。(在 Unix 下,如果路径不以“/”开头,则路径是相对的)。

注意:以冒号 (:) 开头的路径始终被视为绝对路径,因为它们表示 QResource

18、bool isRoot()

目录是否根目录。

19、bool makeAbsolute()

将目录路径转换为绝对路径。返回转换结果。

    QDir dir;qDebug()<<dir.path();dir.makeAbsolute();qDebug()<<dir.path();

20、bool mkdir(const QString &dirName)

创建一个名为 dirName 的子目录。返回创建结果。

如果调用该函数时目录已经存在,则返回false。

21、bool mkpath(const QString &dirPath)

创建目录路径 dirPath。该函数将创建创建目录所需的所有父目录。返回创建结果。

如果调用该函数时目录已经存在,则返回false。

22、void refresh()

刷新目录信息。

23、QString relativeFilePath(const QString &fileName)

返回文件名相对于目录的路径。

    QDir dir;qDebug()<<dir.absolutePath();qDebug()<<dir.relativeFilePath("C:/Users/70957/Pictures/aaa.jpg");qDebug()<<dir.relativeFilePath("D:/eee.jpg");

24、bool remove(const QString &fileName)

删除文件fileName。返回删除结果。

25、bool removeRecursively()

删除目录,包括其所有内容。返回删除结果。

如果无法删除文件或目录,removeRecursively() 会继续并尝试删除尽可能多的文件和子目录,然后返回 false。

26、bool rename(const QString &oldName, const QString &newName)

将文件或目录从 oldName 重命名为 newName。返回重命名结果。

oldName 不存在或具有新名称的文件已存在时会失败。

27、bool rmdir(const QString &dirName)

删除由 dirName 指定的目录。返回删除结果。dirName 必须是空目录才能被删除

28、bool rmpath(const QString &dirPath)

删除目录路径 dirPath。返回删除结果。

该函数将删除 dirPath 中的所有父目录,前提是它们为空。 这与 mkpath(dirPath) 相反。

29、void setFilter(QDir::Filters filters)

设置过滤器。过滤器用于指定应由 entryList() 和 entryInfoList() 返回的文件类型。

30、void setNameFilters(const QStringList &nameFilters)

设置名称过滤器。名称过滤器用于 entryList() 和 entryInfoList() 。

    QStringList filters;filters << "*.cpp" << "*.cxx" << "*.cc";dir.setNameFilters(filters);

31、void setPath(const QString &path)

void setPath(const std::filesystem::path &path)

设置目录的路径。不检查具有此路径的目录是否实际存在。路径可以是绝对或相对的。

32、void setSorting(QDir::SortFlags sort)

设置 entryList() 和 entryInfoList() 使用的排序顺序。

四、宏成员

1、void Q_CLEANUP_RESOURCE(name)

卸载由具有基本名称 name 的 .qrc 文件指定的资源。

通常,当应用程序终止时,Qt 资源会自动卸载,但如果资源位于正在卸载的插件中,则使用此宏强制删除资源。

注意:这个宏不能在命名空间中使用。

Q_CLEANUP_RESOURCE(myapp);

2、void Q_INIT_RESOURCE(name)

使用指定的基本名称初始化 .qrc 文件指定的资源。

通常,当资源作为应用程序的一部分构建时,资源会在启动时自动加载。对于存储在静态库中的资源,在某些平台上需要调用此宏。

例如,如果应用程序的资源列在名为 myapp.qrc 的文件中,可以通过将以下行添加到 main() 函数来确保在启动时初始化资源:

Q_INIT_RESOURCE(myapp);

如果文件名包含不能作为有效 C++ 函数名的一部分的字符(例如 “-”),则必须将它们替换为下划线字符(“_”)

注意:这个宏不能在命名空间中使用。它应该从 main() 调用。 如果不能从main()调用,可以使用以下解决方法:

inline void initMyResource()
{ Q_INIT_RESOURCE(myapp);
}namespace MyNamespace
{...void myFunction(){initMyResource();}
}

Qt文件路径:QDir相关推荐

  1. vlc-qt编译 linux,记录一次搞vlc官方源码中Qt示例工程的过程,文件路径对话框

    代码目录:E:\vlc-3.0.12\doc\libvlc\QtPlayer 编译成立,但是 libvlc_new返回NULL 老子就是要搞他,在网上的其他人成功的代码帮助下要把他搞成 (背景是:老板 ...

  2. Qt/C++调用Windows画图板mspaint,打开指定路径的图片文件,从文件路径中提取目录名和文件名

    一.先看完整的源码 #ifdef Q_OS_WIN #include <Windows.h> #pragma comment(lib, "user32.lib") #p ...

  3. Qt 加载图片文件路径详解

    QT 加载文件,图片路径很容易搞混,需要注意的是WINDOW路径分隔符为"\",QT为"/",我遇到的路径加载总结为三种情况: (1)绝对路径,文件的整个路径, ...

  4. android调用 qt so文件路径,Android Java调用Qt写的so库

    有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...

  5. Qt文件QFile 和文件夹QDir

    一.QFileInfo的简单用法 参考链接:http://blog.sina.com.cn/s/blog_3e62c50d01013xd4.html QFileInfo的几个构造函数: QFileIn ...

  6. Qt拼接文件路径方式总结

    一.使用字符串拼接 QString filePath = QCoreApplication::applicationDirPath() + "/test/temp.dat"; 建议 ...

  7. Qt正确的拼接跨平台文件路径

    跨平台问题 windows 的文件分隔符是 \ ,而 macOS 和 linux 的文件分隔符是 / windows 的路径有盘符,如 C: 情景一 已知 文件路径 和 文件名,拼接该文件的绝对路径 ...

  8. QT打开文件及文件路径

    获取文件夹路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption ...

  9. Qt笔记-拖动文件到QWidget(获取拖动文件路径)

    这里主要重写下面3种方法即可: void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;void dragEnterEvent(QDragEnterEven ...

  10. Qt 中获取文件路径和文件名、后缀名(连续多个后缀名)

    QString fileName, filePath,fileSuffix;     QString fullPath = QFileDialog::getOpenFileName(this,.... ...

最新文章

  1. 计算机专业英语外文翻译,计算机专业英语JAVA介绍外文翻译[共28页]
  2. Dapper+SqlServerCe部署
  3. 【项目管理】RUP内容整理
  4. 58 Openstack基础、openstack之glance、openstack之keystone
  5. Android BottomNavigation Demo
  6. 初学者看看PHP explode() 函数 第6篇
  7. 云计算实战系列五(Linux文件权限II)
  8. Mac 登陆Linux云服务器方法
  9. SSM整合配置文件总结
  10. kotlin语言学习文档 for Android
  11. 通过官网下载KITTI数据集失败解决方法
  12. 微信小程序 地图实现查找标记地点
  13. pyhotn的p2p-sip网络电话小试牛刀
  14. Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?
  15. 《告别失控》读书笔记
  16. Mac OS X 10.10 + WineBottler + XQuartz 成功运行 诛仙3
  17. 定时任务和触发器实例及创建sql
  18. sudo和apt是什么的缩写
  19. 论文笔记——Camouflaged Object Detection
  20. OpenHD改造实现廉价高清数字图传(树莓派+PC)—(二)Wifibroadcast Wifi广播通信

热门文章

  1. 面向图形可扩展矢量图形规范:SVG
  2. FAT32文件系统FAT表修复
  3. java留言功能_java web实现简单留言板功能
  4. 【工业智能】天泽智云带你解读工业智能热门科技 – 大数据、工业互联网、云计算、边缘计算、CPS
  5. 网吧服务器管理维护,网吧服务器常用设置维护工具
  6. matlab_多目标遗传算法
  7. (转)技嘉 MA790FXT-UD5P搭配AMD X4 965超频解析
  8. 微信小程序源码合集(免费)
  9. 数据库系统概念第七版(Database System Concepts 7th)课后习题答案英文版
  10. 浏览器指纹?(防关联浏览器/指纹浏览器/超级浏览器/候鸟浏览器)