Qt文件路径:QDir
一、描述
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:列出应用程序具有读取权限的文件(应用程序可以读取它)。此值需要与 Dirs 或 Files 结合使用。
- Writable:列出应用程序对其具有写入权限的文件。 此值需要与 Dirs 或 Files 结合使用。
- Executable:列出应用程序对其具有执行权限的文件。此值需要与 Dirs 或 Files 结合使用。
- 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相关推荐
- vlc-qt编译 linux,记录一次搞vlc官方源码中Qt示例工程的过程,文件路径对话框
代码目录:E:\vlc-3.0.12\doc\libvlc\QtPlayer 编译成立,但是 libvlc_new返回NULL 老子就是要搞他,在网上的其他人成功的代码帮助下要把他搞成 (背景是:老板 ...
- Qt/C++调用Windows画图板mspaint,打开指定路径的图片文件,从文件路径中提取目录名和文件名
一.先看完整的源码 #ifdef Q_OS_WIN #include <Windows.h> #pragma comment(lib, "user32.lib") #p ...
- Qt 加载图片文件路径详解
QT 加载文件,图片路径很容易搞混,需要注意的是WINDOW路径分隔符为"\",QT为"/",我遇到的路径加载总结为三种情况: (1)绝对路径,文件的整个路径, ...
- android调用 qt so文件路径,Android Java调用Qt写的so库
有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...
- Qt文件QFile 和文件夹QDir
一.QFileInfo的简单用法 参考链接:http://blog.sina.com.cn/s/blog_3e62c50d01013xd4.html QFileInfo的几个构造函数: QFileIn ...
- Qt拼接文件路径方式总结
一.使用字符串拼接 QString filePath = QCoreApplication::applicationDirPath() + "/test/temp.dat"; 建议 ...
- Qt正确的拼接跨平台文件路径
跨平台问题 windows 的文件分隔符是 \ ,而 macOS 和 linux 的文件分隔符是 / windows 的路径有盘符,如 C: 情景一 已知 文件路径 和 文件名,拼接该文件的绝对路径 ...
- QT打开文件及文件路径
获取文件夹路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption ...
- Qt笔记-拖动文件到QWidget(获取拖动文件路径)
这里主要重写下面3种方法即可: void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;void dragEnterEvent(QDragEnterEven ...
- Qt 中获取文件路径和文件名、后缀名(连续多个后缀名)
QString fileName, filePath,fileSuffix; QString fullPath = QFileDialog::getOpenFileName(this,.... ...
最新文章
- 计算机专业英语外文翻译,计算机专业英语JAVA介绍外文翻译[共28页]
- Dapper+SqlServerCe部署
- 【项目管理】RUP内容整理
- 58 Openstack基础、openstack之glance、openstack之keystone
- Android BottomNavigation Demo
- 初学者看看PHP explode() 函数 第6篇
- 云计算实战系列五(Linux文件权限II)
- Mac 登陆Linux云服务器方法
- SSM整合配置文件总结
- kotlin语言学习文档 for Android
- 通过官网下载KITTI数据集失败解决方法
- 微信小程序 地图实现查找标记地点
- pyhotn的p2p-sip网络电话小试牛刀
- Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?
- 《告别失控》读书笔记
- Mac OS X 10.10 + WineBottler + XQuartz 成功运行 诛仙3
- 定时任务和触发器实例及创建sql
- sudo和apt是什么的缩写
- 论文笔记——Camouflaged Object Detection
- OpenHD改造实现廉价高清数字图传(树莓派+PC)—(二)Wifibroadcast Wifi广播通信
热门文章
- 面向图形可扩展矢量图形规范:SVG
- FAT32文件系统FAT表修复
- java留言功能_java web实现简单留言板功能
- 【工业智能】天泽智云带你解读工业智能热门科技 – 大数据、工业互联网、云计算、边缘计算、CPS
- 网吧服务器管理维护,网吧服务器常用设置维护工具
- matlab_多目标遗传算法
- (转)技嘉 MA790FXT-UD5P搭配AMD X4 965超频解析
- 微信小程序源码合集(免费)
- 数据库系统概念第七版(Database System Concepts 7th)课后习题答案英文版
- 浏览器指纹?(防关联浏览器/指纹浏览器/超级浏览器/候鸟浏览器)