QDir Class
QDir 类提供了对目录结构及其内容的访问功能。更多内容...
| 头文件: | #include <QDir> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 所有成员的列表,包括继承的成员
- QDir 属于“输入/输出与网络”以及“隐式共享类”类别。
注意:该类中的所有函数均为可重入的。
QDir 比较
| 类别 | 可比较类型 |
|---|---|
| 相等性 | QDir |
公共类型
| enum | Filter { Dirs, AllDirs, Files, Drives, NoSymLinks, …, CaseSensitive } |
| flags | Filters |
| enum | SortFlag { Name, Time, Size, Type, Unsorted, …, LocaleAware } |
| flags | SortFlags |
公共函数
| QDir(const QString &path = QString()) | |
(since 6.0) | QDir(const std::filesystem::path &path) |
| QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries) | |
(since 6.0) | QDir(const std::filesystem::path &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries) |
| QDir(const QDir &dir) | |
| ~QDir() | |
| QString | absoluteFilePath(const QString &fileName) const |
| QString | absolutePath() const |
| QString | canonicalPath() const |
| bool | cd(const QString &dirName) |
| bool | cdUp() |
| qsizetype | count() const |
| QString | dirName() const |
| QFileInfoList | entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const |
| QFileInfoList | entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const |
| QStringList | entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const |
| QStringList | entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const |
| bool | exists(const QString &name) const |
| bool | exists() const |
| QString | filePath(const QString &fileName) const |
(since 6.0) std::filesystem::path | filesystemAbsolutePath() const |
(since 6.0) std::filesystem::path | filesystemCanonicalPath() const |
(since 6.0) std::filesystem::path | filesystemPath() const |
| QDir::Filters | filter() const |
| bool | isAbsolute() const |
| bool | isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const |
| bool | isReadable() const |
| bool | isRelative() const |
| bool | isRoot() const |
| bool | makeAbsolute() |
| bool | mkdir(const QString &dirName, std::optional<QFileDevice::Permissions> permissions = std::nullopt) const |
| bool | mkpath(const QString &dirPath, std::optional<QFileDevice::Permissions> permissions = std::nullopt) const |
| QStringList | nameFilters() const |
| QString | path() const |
| void | refresh() const |
| QString | relativeFilePath(const QString &fileName) const |
| bool | remove(const QString &fileName) |
| bool | removeRecursively() |
| bool | rename(const QString &oldName, const QString &newName) |
| bool | rmdir(const QString &dirName) const |
| bool | rmpath(const QString &dirPath) const |
| void | setFilter(QDir::Filters filters) |
| void | setNameFilters(const QStringList &nameFilters) |
| void | setPath(const QString &path) |
(since 6.0) void | setPath(const std::filesystem::path &path) |
| void | setSorting(QDir::SortFlags sort) |
| QDir::SortFlags | sorting() const |
| void | swap(QDir &other) |
| QDir & | operator=(QDir &&other) |
| QDir & | operator=(const QDir &dir) |
| QString | operator[](qsizetype pos) const |
静态公共成员
| void | addSearchPath(const QString &prefix, const QString &path) |
(since 6.0) void | addSearchPath(const QString &prefix, const std::filesystem::path &path) |
| QString | cleanPath(const QString &path) |
| QDir | current() |
| QString | currentPath() |
| QFileInfoList | drives() |
| QString | fromNativeSeparators(const QString &pathName) |
| QDir | home() |
| QString | homePath() |
| bool | isAbsolutePath(const QString &path) |
| bool | isRelativePath(const QString &path) |
| QChar | listSeparator() |
| bool | match(const QString &filter, const QString &fileName) |
| bool | match(const QStringList &filters, const QString &fileName) |
| QDir | root() |
| QString | rootPath() |
| QStringList | searchPaths(const QString &prefix) |
| QChar | separator() |
| bool | setCurrent(const QString &path) |
| void | setSearchPaths(const QString &prefix, const QStringList &searchPaths) |
| QDir | temp() |
| QString | tempPath() |
| QString | toNativeSeparators(const QString &pathName) |
相关的非成员
| bool | operator!=(const QDir &lhs, const QDir &rhs) |
| bool | operator==(const QDir &lhs, const QDir &rhs) |
详细说明
QDir 用于操作路径名、访问与路径和文件相关的信息,以及操作底层文件系统。它还可以用于访问 Qt 的资源系统。
Qt 将“/”用作通用目录分隔符,这与 URL 中将“/”用作路径分隔符的方式相同。如果您始终使用“/”作为目录分隔符,Qt 会将您的路径转换为符合底层操作系统规范的格式。
QDir 可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开头(在 Windows 系统中,其前可选地跟一个驱动器标识)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。
绝对路径的示例:
在 Windows 系统中,上述第二个示例在访问文件时将被转换为C:\Users 。
相对路径的示例:
QDir("images/landscape.png");您可以使用isRelative() 或isAbsolute() 函数来检查 QDir 是否使用的是相对文件路径还是绝对文件路径。调用makeAbsolute() 可将相对 QDir 转换为绝对 QDir。
注意: 以冒号(:)开头的路径 始终被视为绝对路径,因为它们表示QResource 。
导航和目录操作
可通过path()函数获取目录的路径,并通过setPath()函数设置新路径。调用absolutePath()可获取目录的绝对路径。
目录名称可通过dirName()函数获取。该函数通常返回绝对路径中指定目录位置的最后一个元素。但是,如果QDir表示当前目录,则该函数也会返回“.”。
目录的路径还可以通过cd() 和cdUp() 函数进行更改,这两者的操作方式都与常见的 shell 命令类似。当使用现有目录的名称调用cd() 时,QDir 对象会切换目录,使其代表该目录。cdUp() 函数会将 QDir 对象的目录更改为其父目录;即 cd("..") 等同于cdUp()。
可以使用mkdir() 创建目录,使用rename() 重命名目录,并使用rmdir() 删除目录。
您可以使用 `exists()` 检查指定名称的目录是否存在,并可通过 `isReadable()`、`isAbsolute()`、`isRelative()` 以及 `isRoot()` 检查目录的属性。
refresh() 函数会从磁盘重新读取目录的数据。
文件和目录内容
目录包含若干条目,代表文件、目录和符号链接。count() 函数返回目录中的条目数量。可通过entryList() 获取目录中所有条目名称的字符串列表。若需获取每个条目的详细信息,请使用entryInfoList() 获取QFileInfo 对象的列表。
可以使用filePath() 和absoluteFilePath() 构建目录内文件和目录的路径。filePath() 函数返回相对于 QDir 对象路径的指定文件或目录的相对路径;absoluteFilePath() 返回指定文件或目录的绝对路径。这两个函数均不检查文件或目录是否存在,它们仅用于构建路径。
QDir directory("Documents/Letters");
QString path = directory.filePath("contents.txt");
QString absolutePath = directory.absoluteFilePath("contents.txt");可以使用remove()函数删除文件。目录不能像文件那样删除;请改用rmdir()来删除目录。
通过对 QDir 对象应用过滤器,可以减少entryList() 和entryInfoList() 返回的条目数量。您可以应用名称过滤器来指定文件名需要匹配的包含通配符的模式,应用属性过滤器来选择条目的属性(并能区分文件和目录),以及指定排序顺序。
名称过滤器是由字符串列表组成的,这些列表会被传递给setNameFilters()。属性过滤器由Filters的按位或组合构成,并在调用setFilter()时指定。排序顺序通过setSorting()指定,其中使用SortFlags 的按位或组合。
您可以使用match()函数来测试文件名是否符合某个过滤条件。
在调用entryList() 和entryInfoList() 时,还可以指定过滤和排序顺序标志,以覆盖先前定义的行为。
当前目录和其他特殊路径
通过一些返回 QDir 对象的静态函数,可以访问一些常用目录。此外,还有相应的函数返回字符串:
| QDir | QString | 返回值 |
|---|---|---|
| current() | currentPath() | 应用程序的工作目录 |
| home() | homePath() | 用户的主目录 |
| root() | rootPath() | 根目录 |
| temp() | tempPath() | 系统的临时目录 |
还可以使用静态函数 `setCurrent()` 来设置应用程序的工作目录。
若要查找包含应用程序可执行文件的目录,请参阅QCoreApplication::applicationDirPath()。
静态函数drives() 会为每个包含文件系统的设备提供一个根目录列表。在 Unix 系统上,该函数返回的列表仅包含一个根目录“/”;在 Windows 系统上,该列表通常包含C:/ ,并可能根据用户系统的配置包含其他驱动器号,例如D:/ 。
路径操作与字符串
包含“.”元素(表示路径中该位置的当前目录)、“..”元素(表示父目录)以及符号链接的路径,可通过canonicalPath()函数转换为规范形式。
还可以通过使用cleanPath()来删除多余的“/”和“..”元素,从而简化路径。
有时需要以用户平台的原生表示形式显示路径。静态函数toNativeSeparators() 会返回指定路径的副本,其中每个目录分隔符都被替换为底层操作系统对应的适当分隔符。
示例
检查目录是否存在:
(我们也可以使用其中一个静态便捷函数:QFileInfo::exists() 或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", qPrintable(file.fileName()));
}一个列出当前目录中所有文件(不包括符号链接)并按大小从最小到大排序的程序:
#include <QDir>
#include <iostream>
#include <QCoreApplication>
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;
}平台相关问题
在 Android 系统上,处理内容 URI 时存在一些限制:
- 可能需要通过QFileDialog (该组件实现了Android的原生文件选择器)向用户提示以获取访问权限。
- 请尽量遵循“范围存储”指南,例如使用应用程序专属目录,而非其他公共外部目录。有关更多信息,请参阅存储最佳实践。
- 由于 Qt API(例如QFile )的设计限制,无法将这些 API 与 Android 的MediaStoreAPI 完全集成。
另请参阅 QFileInfo 、QFile 、QFileDialog 、QCoreApplication::applicationDirPath() 以及“获取更多”示例。
成员类型文档
enum QDir::Filter
flags QDir::Filters
此枚举描述了QDir 可用的过滤选项;例如,用于entryList()和entryInfoList()。过滤值通过使用位或运算符组合以下列表中的值来指定:
| 常量 | 值 | 描述 |
|---|---|---|
QDir::Dirs | 0x001 | 列出符合过滤条件的目录。 |
QDir::AllDirs | 0x400 | 列出所有目录;即不对目录名称应用过滤条件。 |
QDir::Files | 0x002 | 列出文件。 |
QDir::Drives | 0x004 | 列出磁盘驱动器(在 Unix 系统下被忽略)。 |
QDir::NoSymLinks | 0x008 | 不列出符号链接(不支持符号链接的操作系统会忽略此选项)。 |
QDir::NoDotAndDotDot | NoDot | NoDotDot | 不列出特殊条目“.”和“..”。 |
QDir::NoDot | 0x2000 | 不列出特殊条目“.”。 |
QDir::NoDotDot | 0x4000 | 不列出特殊条目“..”。 |
QDir::AllEntries | Dirs | Files | Drives | 列出目录、文件、驱动器和符号链接(除非指定 System,否则不列出已断开的符号链接)。 |
QDir::Readable | 0x010 | 列出应用程序具有读取权限的文件。“Readable”值需要与“Dirs”或“Files”结合使用。 |
QDir::Writable | 0x020 | 列出应用程序具有读权限的文件。“Readable”值需要与“Dirs”或“Files”结合使用。 |
QDir::Executable | 0x040 | 列出应用程序具有执行权限的文件。“可执行”值需要与“目录”或“文件”结合使用。 |
QDir::Hidden | 0x100 | 列出隐藏文件(在 Unix 系统上,指以“.”开头的文件)。 |
QDir::System | 0x200 | 列出系统文件(在 Unix 系统中,包括 FIFO、套接字和设备文件;在 Windows 系统中,包括.lnk 文件) |
QDir::CaseSensitive | 0x800 | 该筛选条件应区分大小写。 |
使用 Filter 枚举值过滤文件和目录列表的函数将包括指向文件和目录的符号链接,除非您设置了 NoSymLinks 值。
默认构建的 `QDir ` 不会根据文件的权限进行过滤,因此 `entryList()` 和 `entryInfoList()` 将返回所有可读、可写、可执行或这三者任意组合的文件。这使得默认值既易于编写,又非常实用。
例如,设置Readable 、Writable 和Files 标志,即可列出应用程序具有读取权限、写入权限或两者兼有的所有文件。如果该组合中还包含Dirs 和Drives 标志,则可以列出所有驱动器、目录、应用程序可以读取、写入或执行的所有文件,以及指向此类文件/目录的符号链接。
要获取目录的权限,请使用entryInfoList() 函数获取相关的QFileInfo 对象,然后使用QFileInfo::permissions() 获取每个文件的权限和所有权。
Filters类型是QFlags<Filter>的typedef定义。它存储Filter值的或(OR)组合。
enum QDir::SortFlag
flags QDir::SortFlags
此枚举描述了QDir 可用的排序选项,例如用于entryList()和entryInfoList()的方法。排序值通过将以下列表中的值进行按“或”运算组合而指定:
| 常量 | 值 | 描述 |
|---|---|---|
QDir::Name | 0x00 | 按名称排序。 |
QDir::Time | 0x01 | 按时间(修改时间)排序。 |
QDir::Size | 0x02 | 按文件大小排序。 |
QDir::Type | 0x80 | 按文件类型(扩展名)排序。 |
QDir::Unsorted | 0x03 | 不排序。 |
QDir::NoSort | -1 | 默认不排序。 |
QDir::DirsFirst | 0x04 | 先显示目录,再显示文件。 |
QDir::DirsLast | 0x20 | 先显示文件,再显示目录。 |
QDir::Reversed | 0x08 | 反转排序顺序。 |
QDir::IgnoreCase | 0x10 | 按不区分大小写的方式排序。 |
QDir::LocaleAware | 0x40 | 根据当前区域设置对项目进行适当排序。 |
您只能指定前四个选项中的一个。
如果同时指定了 DirsFirst 和 Reversed,目录仍会排在前面,但顺序会反转;文件将列在目录之后,同样按反向顺序排列。
SortFlags 类型是QFlags<SortFlag> 的 typedef。它存储了 SortFlag 值的按“或”运算组合。
成员函数文档
QDir::QDir(const QString &path = QString())
创建一个指向指定目录path 的QDir。如果path为空,则使用程序的工作目录(“.”)。
另请参阅 currentPath()。
[since 6.0] QDir::QDir(const std::filesystem::path &path)
创建一个指向给定目录path 的QDir对象。如果path为空,则使用程序的工作目录(“.”)。
该函数在 Qt 6.0 中引入。
另请参阅 currentPath()。
QDir::QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
创建一个路径为path 的 QDir,该 QDir 通过nameFilter 按名称过滤条目,并通过filters 按属性过滤条目。它还会使用sort 对名称进行排序。
默认的nameFilter 为空字符串,不排除任何项目;默认的filters 为AllEntries ,同样不排除任何项目。默认的sort 为Name |IgnoreCase ,即按名称排序且不区分大小写。
如果path 是空字符串,QDir 将使用 "."(当前目录)。如果nameFilter 是空字符串,QDir 将使用名称过滤器 "*"(所有文件)。
注意: path 不必存在。
另请参阅 exists()、setPath()、setNameFilters()、setFilter() 和setSorting()。
[since 6.0] QDir::QDir(const std::filesystem::path &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
创建一个路径为path 的 QDir,该 QDir 通过nameFilter 按名称过滤其条目,并通过filters 按属性过滤。它还会使用sort 对名称进行排序。
默认的nameFilter 为空字符串,不排除任何内容;默认的filters 为AllEntries ,同样不排除任何内容。默认的sort 为Name |IgnoreCase ,即按名称排序且不区分大小写。
如果path 为空,QDir 将使用 "."(当前目录)。如果nameFilter 为空字符串,QDir 将使用名称过滤器 "*"(所有文件)。
注意: path 不必存在。
该函数于 Qt 6.0 中引入。
另请参见 exists()、setPath()、setNameFilters()、setFilter() 和setSorting()。
QDir::QDir(const QDir &dir)
创建一个 QDir 对象,该对象是目录dir 对应的 QDir 对象的副本。
另请参阅 operator=()。
[noexcept] QDir::~QDir()
销毁QDir 对象并释放其资源。这不会对文件系统中的底层目录产生任何影响。
QString QDir::absoluteFilePath(const QString &fileName) const
返回该目录中文件的绝对路径名。不会检查该文件是否实际存在于该目录中;但请参阅exists()。fileName 中多余的多个分隔符或“.”和“..”目录不会被移除(参阅cleanPath())。
另请参阅 relativeFilePath()、filePath() 和canonicalPath()。
QString QDir::absolutePath() const
返回绝对路径(即以“/”或驱动器标识符开头的路径),该路径可能包含符号链接,但绝不会包含多余的“.”、“..”或多个分隔符。
另请参阅 setPath()、canonicalPath()、exists()、cleanPath()、dirName() 以及absoluteFilePath()。
[static] void QDir::addSearchPath(const QString &prefix, const QString &path)
将path 添加到prefix 的搜索路径中。
另请参阅 setSearchPaths()。
[static, since 6.0] void QDir::addSearchPath(const QString &prefix, const std::filesystem::path &path)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
QString QDir::canonicalPath() const
返回规范路径,即不含符号链接或多余的“.”或“..”元素的路径。
在没有符号链接的系统上,该函数返回的字符串始终与absolutePath()返回的字符串相同。 如果条目不存在、不可访问(例如,当前用户无权访问该目录路径),或者在规范化路径时发生错误(通常是由于悬空符号链接),则该方法将返回空字符串。
示例:
QString bin = "/local/bin"; // where /local/bin is a symlink to /usr/bin
QDir binDir(bin);
QString canonicalBin = binDir.canonicalPath();
// canonicalBin now equals "/usr/bin"
QString ls = "/local/bin/ls"; // where ls is the executable "ls"
QDir lsDir(ls);
QString canonicalLs = lsDir.canonicalPath();
// canonicalLS now equals "/usr/bin/ls".另请参见 path()、absolutePath()、exists()、cleanPath()、dirName() 以及absoluteFilePath()。
bool QDir::cd(const QString &dirName)
将QDir 的目录更改为dirName 。
如果新目录存在,则返回true ;否则返回false 。请注意,如果新目录不存在,则不会执行逻辑上的cd()操作。
调用 cd("..") 等同于调用cdUp()。
另请参阅 cdUp()、isReadable()、exists() 和path()。
bool QDir::cdUp()
从QDir 的当前目录向上移动一级目录。
如果新目录存在,则返回true ;否则返回false 。请注意,如果新目录不存在,则不会执行逻辑上的cdUp()操作。
注意:在 Android系统上 ,此功能不支持内容 URI。有关详细信息,请参阅DocumentFile.getParentFile()。
另请参阅 cd()、isReadable()、exists() 和path()。
[static] QString QDir::cleanPath(const QString &path)
返回path ,其中目录分隔符已规范化(即将平台原生分隔符转换为“/”),冗余分隔符已被移除,且“.”和“..”已尽可能解析。
符号链接将被保留。该函数返回的不是规范路径,而是输入路径的最简化版本。 例如,“./local”变为“local”,“local/../bin”变为“bin”,而“/local/usr/../bin”变为“/local/bin”。
另请参阅 absolutePath() 和canonicalPath()。
qsizetype QDir::count() const
返回该目录中目录和文件的总数。
等同于 `entryList()`.count()。
注意:在 Qt 6.5 之前的版本中,此函数返回的是 `uint`,而不是 `qsizetype`。
另请参阅 operator[]() 和entryList()。
[static] QDir QDir::current()
返回应用程序的当前目录。
该目录使用当前目录的绝对路径构建,从而确保其path() 与absolutePath() 结果一致。
另请参阅 currentPath()、setCurrent()、home()、root() 以及temp()。
[static] QString QDir::currentPath()
返回应用程序当前目录的绝对路径。当前目录是指通过QDir::setCurrent() 设置的最后一个目录;如果从未调用过该函数,则指父进程启动该应用程序时的目录。
另请参阅 current()、setCurrent()、homePath()、rootPath()、tempPath() 以及QCoreApplication::applicationDirPath()。
QString QDir::dirName() const
返回目录的名称;这与路径不同,例如,名称为“mail”的目录,其路径可能是“/var/spool/mail”。如果目录没有名称(例如,它是根目录),则返回一个空字符串。
不会检查该名称的目录是否实际存在;但请参阅exists()。
另请参阅 path()、filePath()、absolutePath() 以及absoluteFilePath()。
[static] QFileInfoList QDir::drives()
返回该系统上所有根目录的列表。
在 Windows 系统上,该函数返回一个包含“C:/”、“D:/”等的 `QFileInfo ` 对象列表。该函数不会返回包含可弹出且为空的存储介质的驱动器。在其他操作系统上,该函数返回的列表仅包含一个根目录(即“/”)。
QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
返回该目录中所有文件和目录的QFileInfo 对象列表,这些对象按先前通过setNameFilters()和setFilter()设置的名称和属性过滤器进行筛选,并根据通过setSorting()设置的标志进行排序。
名称过滤器、文件属性过滤器和排序规范可通过nameFilters 、filters 和sort 参数进行覆盖。
如果目录不可读、不存在,或者没有任何内容符合指定条件,则返回一个空列表。
对于大型目录,此函数可能会导致内存突增,因为它会为目录中的每个条目创建一个QFileInfo 实例。如果目标是逐个遍历项目,请考虑使用QDirListing 。
另请参阅 entryList()、setNameFilters()、setSorting()、setFilter()、isReadable() 以及exists()。
QFileInfoList QDir::entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
返回该目录中所有文件和目录的QFileInfo 对象列表,这些对象按先前通过setNameFilters()和setFilter()设置的名称和属性过滤条件进行筛选,并根据通过setSorting()设置的标志进行排序。
可以通过filters 和sort 参数覆盖属性过滤器和排序规范。
如果目录不可读、不存在,或者没有任何内容符合规范,则返回一个空列表。
对于大型目录,此函数可能会导致内存突增,因为它会为目录中的每个条目创建一个QFileInfo 实例。如果目标是逐个遍历项目,请考虑使用QDirListing 。
这是一个重载函数。
另请参阅 entryList()、setNameFilters()、setSorting()、setFilter()、isReadable() 以及exists()。
QStringList QDir::entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
返回该目录中所有文件和目录名称的列表,这些名称按照先前通过setNameFilters()和setFilter()设置的名称和属性过滤条件进行筛选,并根据通过setSorting()设置的标志进行排序。
名称过滤器、文件属性过滤器和排序规范可通过nameFilters 、filters 以及sort 参数进行覆盖。
如果目录不可读、不存在,或者没有任何条目符合规范,则返回一个空列表。
对于大型目录,此函数可能会导致内存激增,因为它会为目录中的每个条目创建一个QString 实例。如果目标是逐个遍历项目,请考虑使用QDirListing 。
另请参阅 entryInfoList()、setNameFilters()、setSorting(),以及setFilter()。
QStringList QDir::entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
返回该目录中所有文件和目录名称的列表,这些名称按照先前通过setNameFilters()和setFilter()设置的名称和属性过滤条件进行排序,并根据通过setSorting()设置的标志进行排序。
可以通过filters 和sort 参数覆盖属性过滤器和排序规范。
如果目录不可读、不存在,或者没有任何内容符合规范,则返回一个空列表。
注意:若要 列出指向不存在的文件的符号链接,必须将System 传递给过滤器。
对于大型目录,此函数可能会导致内存突增,因为它会为目录中的每个条目创建一个 `QString ` 实例。如果目标是逐个遍历项目,请考虑使用 `QDirListing `。
这是一个重载函数。
另请参阅 entryInfoList()、setNameFilters()、setSorting(),以及setFilter()。
bool QDir::exists(const QString &name) const
如果名为name 的文件存在,则返回true ;否则返回 false。
除非 `name ` 包含绝对文件路径,否则该文件名被视为相对于该目录本身,因此该函数通常用于检查目录内是否存在文件。
另请参阅 QFileInfo::exists() 和QFile::exists()。
bool QDir::exists() const
如果目录存在,则返回true ;否则返回false 。(如果找到同名的文件,该函数将返回false)。
该函数的带参数重载版本用于检测目录中是否存在文件和目录。
这是一个重载函数。
另请参阅 QFileInfo::exists() 和QFile::exists()。
QString QDir::filePath(const QString &fileName) const
返回该目录中文件的路径名。不会检查该文件是否实际存在于该目录中;但请参阅exists()。如果QDir 是相对路径,则返回的路径名也将是相对路径。fileName 中多余的分隔符或“.”和“..”目录不会被移除(参见cleanPath())。
另请参阅 dirName()、absoluteFilePath()、isRelative() 以及canonicalPath()。
[since 6.0] std::filesystem::path QDir::filesystemAbsolutePath() const
返回absolutePath(),结果为std::filesystem::path 。
该函数在 Qt 6.0 中引入。
另请参阅 absolutePath()。
[since 6.0] std::filesystem::path QDir::filesystemCanonicalPath() const
返回canonicalPath(),其值为std::filesystem::path 。
该函数自 Qt 6.0 起引入。
另请参阅 canonicalPath()。
[since 6.0] std::filesystem::path QDir::filesystemPath() const
返回path(),其值为std::filesystem::path 。
该函数在 Qt 6.0 中引入。
另请参阅 path()。
QDir::Filters QDir::filter() const
返回由setFilter()设置的值
另请参阅 setFilter()。
[static] QString QDir::fromNativeSeparators(const QString &pathName)
返回以“/”作为文件分隔符的pathName 。例如,在 Windows 上,fromNativeSeparators("c:\\winnt\\system32") 会返回 "c:/winnt/system32"。
在某些操作系统上(例如 Unix),返回的字符串可能与参数相同。
另请参阅 toNativeSeparators() 和separator()。
[static] QDir QDir::home()
返回用户的主目录。
该目录使用主目录的绝对路径构建,从而确保其path()与absolutePath()的结果相同。
详情请参阅homePath()。
另请参阅 drives()、current()、root() 和temp()。
[static] QString QDir::homePath()
返回用户主目录的绝对路径。
在 Windows 系统下,此函数将返回当前用户的配置文件所在目录。通常,该目录为:
C:/Users/Username请使用toNativeSeparators() 函数将分隔符转换为底层操作系统所适用的格式。
如果当前用户的配置文件目录不存在或无法获取,则将按以下顺序检查替代路径,直到找到一个存在且可用的路径为止:
- 由
USERPROFILE环境变量指定的路径。 - 由
HOMEDRIVE和HOMEPATH环境变量拼接而成的路径。 - 由
HOME环境变量指定的路径。 - 由rootPath() 函数返回的路径(该函数使用
SystemDrive环境变量) C:/目录。
在非 Windows 操作系统中,如果存在HOME 环境变量,则使用该变量;否则,使用rootPath() 函数返回的路径。
另请参阅 home()、currentPath()、rootPath() 和tempPath()。
bool QDir::isAbsolute() const
如果目录路径为绝对路径,则返回 `true `;否则返回 `false`。参见 `isAbsolutePath()`。
注意: 以冒号 (:) 开头的路径 始终被视为绝对路径,因为它们表示QResource 。
另请参阅 isRelative()、makeAbsolute() 和cleanPath()。
[static] bool QDir::isAbsolutePath(const QString &path)
如果path 是绝对路径,则返回true ;如果是相对路径,则返回false 。
注意: 以冒号 (:) 开头的路径 始终被视为绝对路径,因为它们表示QResource 。
另请参阅 isAbsolute()、isRelativePath()、makeAbsolute()、cleanPath() 以及QResource 。
bool QDir::isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const
返回该目录是否为空。
相当于使用过滤器QDir::AllEntries | QDir::NoDotAndDotDot 的count() == 0 ,但速度更快,因为它仅检查目录中是否至少包含一个条目。
注意:除非 将filters 的标志设置为包含QDir::NoDotAndDotDot (默认值即如此),否则没有任何目录是空的。
另请参阅 count()、entryList() 和setFilter()。
bool QDir::isReadable() const
如果目录可读且能按文件名打开文件,则返回true ;否则返回false 。
警告: 该函数返回 false 并不一定意味着目录中的文件不可访问。
另请参阅 QFileInfo::isReadable()。
bool QDir::isRelative() const
如果目录路径是相对路径,则返回true ;否则返回false。(在Unix系统中,如果路径不以“/”开头,则视为相对路径)。
注意: 以冒号 (:) 开头的路径 始终被视为绝对路径,因为它们表示QResource 。
另请参阅 makeAbsolute()、isAbsolute()、isAbsolutePath() 以及cleanPath()。
[static] bool QDir::isRelativePath(const QString &path)
如果path 是相对路径,则返回true ;如果是绝对路径,则返回false 。
注意: 以冒号 (:) 开头的路径 始终被视为绝对路径,因为它们表示QResource 。
另请参阅 isRelative()、isAbsolutePath( ) 和makeAbsolute( )。
bool QDir::isRoot() const
如果该目录是根目录,则返回true ;否则返回false 。
注意:如果 该目录是根目录的符号链接,则该函数返回 `false`。若要检测此情况,请使用 `canonicalPath()`,例如:
QDir dir("/tmp/root_link");
dir=dir.canonicalPath();
if(dir.isRoot())
qWarning("It is a root link");[static constexpr noexcept] QChar QDir::listSeparator()
返回本机路径分隔符:在 Unix 系统下为 ':',在 Windows 系统下为 ';'。
另请参阅 separator()。
bool QDir::makeAbsolute()
将目录路径转换为绝对路径。如果路径已经是绝对路径,则不执行任何操作。如果转换成功,返回true ;否则返回false 。
另请参阅 isAbsolute()、isAbsolutePath()、isRelative() 和cleanPath()。
[static] bool QDir::match(const QString &filter, const QString &fileName)
如果fileName 与通配符(glob)模式filter 匹配,则返回true ;否则返回false 。filter 中可以包含多个用空格或分号分隔的模式。匹配操作不区分大小写。
另请参阅 QRegularExpression::fromWildcard()、entryList() 和entryInfoList()。
[static] bool QDir::match(const QStringList &filters, const QString &fileName)
如果fileName 与filters 列表中的任何通配符(glob)模式匹配,则返回true ;否则返回false 。匹配操作不区分大小写。
这是一个重载函数。
另请参阅 QRegularExpression::fromWildcard()、entryList() 和entryInfoList()。
bool QDir::mkdir(const QString &dirName, std::optional<QFileDevice::Permissions> permissions = std::nullopt) const
创建一个名为dirName 的子目录,并使用给定的permissions 。
如果permissions 即为std::nullopt (默认值),则该函数将设置默认权限。
成功时返回true ;如果操作失败或dirName 已存在,则返回false 。
如果dirName 已经存在,此方法不会更改其权限。
在 POSIX 系统上,permissions 由当前进程的 umask (文件创建掩码)进行修改,这意味着某些权限位可能会被禁用。
在 Windows 上,默认情况下,新目录会从其父目录继承权限。permissions 通过 ACL 进行模拟。当组被授予的权限少于其他组时,这些 ACL 可能处于非规范顺序。 当打开“属性”对话框的“安全”选项卡时,具有此类权限的文件和目录会触发警告。若将授予“其他人”的所有权限也授予该组,即可避免此类警告。
注意:Qt 6.10 添加了permissions 参数。若要恢复mkdir(const QString &) 的旧行为(使用默认的平台特定权限),请将permissions 设置为std::nullopt (默认值)。此新方法还会透明地替换mkdir(const QString &, QFile::Permissions) 重载方法。
另请参阅 rmdir()、mkpath() 和rmpath()。
bool QDir::mkpath(const QString &dirPath, std::optional<QFileDevice::Permissions> permissions = std::nullopt) const
创建一个名为dirPath 的目录。
如果dirPath 尚未存在,则该方法将使用permissions 创建该目录——以及任何不存在的父目录。
如果dirPath 已经存在,则此方法不会更改其权限;对于任何已存在的父目录也是如此。
如果permissions 为std::nullopt (默认值),则该函数将设置默认权限。
成功时或当dirPath 已存在时,返回true ;否则返回false 。
在 POSIX 系统上,permissions 会受到 umask (文件创建掩码)进行修改,这意味着某些权限位可能会被禁用。
在 Windows 上,默认情况下,新目录会从其父目录继承权限。permissions 通过 ACL 进行模拟。当组被授予的权限少于其他组时,这些 ACL 可能处于非规范顺序。 当打开“属性”对话框的“安全性”选项卡时,具有此类权限的文件和目录会生成警告。向该组授予与“其他人”相同的全部权限可避免此类警告。
注意:Qt 6.10 添加了permissions 参数。若要恢复mkpath(const QString &) 的旧行为(使用默认的平台特定权限),请将permissions 设置为std::nullopt (默认值)。
另请参阅 rmpath()、mkdir() 和rmdir()。
QStringList QDir::nameFilters() const
返回由setNameFilters()设置的字符串列表
另请参阅 setNameFilters()。
QString QDir::path() const
返回路径。该路径可能包含符号链接,但绝不会包含多余的“.”、“..”或多个分隔符。
返回的路径可以是绝对路径,也可以是相对路径(参见setPath())。
另请参阅 setPath()、absolutePath()、exists()、cleanPath()、dirName()、absoluteFilePath()、toNativeSeparators() 以及makeAbsolute()。
void QDir::refresh() const
刷新目录信息。
QString QDir::relativeFilePath(const QString &fileName) const
返回相对于该目录的fileName 的路径。
QDir dir("/home/bob");
QString s;
s = dir.relativeFilePath("images/file.jpg"); // s is "images/file.jpg"
s = dir.relativeFilePath("/home/mary/file.txt"); // s is "../mary/file.txt"另请参阅 absoluteFilePath()、filePath() 和canonicalPath()。
bool QDir::remove(const QString &fileName)
删除文件fileName 。
如果文件已成功删除,则返回true ;否则返回false 。
bool QDir::removeRecursively()
删除该目录及其所有内容。
如果成功,返回true ;否则返回false。
如果某个文件或目录无法删除,removeRecursively() 会继续执行并尝试删除尽可能多的文件和子目录,然后返回false 。
如果目录已被删除,该方法将返回true (预期结果已达成)。
注意:此函数 旨在删除应用程序内部的小型目录(例如临时目录),而非用户可见的目录。对于用户可见的操作,更建议向用户更精确地报告错误、在出现错误时提供解决方案、在删除过程中显示进度(因为该过程可能需要几分钟)等。
bool QDir::rename(const QString &oldName, const QString &newName)
将文件或目录从oldName 重命名为newName ,成功时返回 true;否则返回false 。
在大多数文件系统中,rename() 仅在oldName 不存在,或者已存在同名文件时才会失败。不过,rename() 失败还可能有其他原因。例如,在至少一种文件系统中,如果newName 指向一个已打开的文件,rename() 也会失败。
如果oldName 是一个无法立即重命名的文件(而非目录),Qt 将尝试将oldName 复制到newName ,并删除oldName 。
另请参阅 QFile::rename()。
bool QDir::rmdir(const QString &dirName) const
删除由dirName 指定的目录。
rmdir() 函数要成功执行,该目录必须为空。
若成功,则返回true ;否则返回false 。
另请参阅 mkdir()。
bool QDir::rmpath(const QString &dirPath) const
删除目录路径dirPath 。
该函数将删除dirPath 中的所有父目录,前提是这些目录为空。这与 mkpath(dirPath) 的作用相反。
若操作成功,则返回true ;否则返回false 。
另请参阅 mkpath()。
[static] QDir QDir::root()
返回根目录。
该目录使用根目录的绝对路径构建,从而确保其path()与absolutePath()的结果一致。
详情请参阅rootPath()。
另请参阅 drives()、current()、home() 和temp()。
[static] QString QDir::rootPath()
返回根目录的绝对路径。
对于 Unix 操作系统,此函数返回“/”。对于 Windows 文件系统,此函数通常返回“c:/”。
另请参阅 root()、drives()、currentPath()、homePath() 以及tempPath()。
[static] QStringList QDir::searchPaths(const QString &prefix)
返回prefix 的搜索路径。
另请参阅 setSearchPaths() 和addSearchPath()。
[static] QChar QDir::separator()
返回本机目录分隔符:在 Unix 系统下为“/”,在 Windows 系统下为“\”。
您无需使用此函数来构建文件路径。如果您始终使用“/”,Qt 会将您的路径转换为符合底层操作系统规范的格式。如果您希望使用用户操作系统的分隔符向用户显示路径,请使用toNativeSeparators()。
另请参阅 listSeparator()。
[static] bool QDir::setCurrent(const QString &path)
将应用程序的当前工作目录设置为path 。如果目录更改成功,则返回true ;否则返回false 。
QString absolute = "/local/bin";
QString relative = "local/bin";
QFileInfo absFile(absolute);
QFileInfo relFile(relative);
QDir::setCurrent(QDir::rootPath());
// absFile and relFile now point to the same file
QDir::setCurrent("/tmp");
// absFile now points to "/local/bin",
// while relFile points to "/tmp/local/bin"另请参见 current()、currentPath()、home()、root() 以及temp()。
void QDir::setFilter(QDir::Filters filters)
将entryList()和entryInfoList()所使用的过滤器设置为filters 。该过滤器用于指定entryList()和entryInfoList()应返回的文件类型。请参阅QDir::Filter 。
另请参阅 filter() 和setNameFilters()。
void QDir::setNameFilters(const QStringList &nameFilters)
将entryList()和entryInfoList()所使用的名称过滤器设置为由nameFilters 指定的过滤器列表。
每个名称过滤器都是一个通配符(globbing)过滤器,支持* 和? 中的通配符。请参阅QRegularExpression::fromWildcard()。
例如,以下代码在QDir 上设置了三个名称过滤器,以确保仅列出通常用于 C++ 源文件的扩展名的文件:
QStringList filters;
filters << "*.cpp" << "*.cxx" << "*.cc";
dir.setNameFilters(filters);另请参阅 nameFilters() 和setFilter()。
void QDir::setPath(const QString &path)
将目录路径设置为path 。该路径会去除多余的“.”、“..”以及多个分隔符。系统不会检查该路径下的目录是否实际存在;但您可以使用exists() 自行进行检查。
路径可以是绝对路径,也可以是相对路径。绝对路径以目录分隔符“/”开头(在 Windows 系统中,其前可选地跟随一个驱动器指定)。 相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。绝对路径的示例是字符串“/tmp/quartz”,相对路径则可能类似于“src/fatlib”。
另请参阅 path()、absolutePath()、exists()、cleanPath()、dirName()、absoluteFilePath()、isRelative() 以及makeAbsolute()。
[since 6.0] void QDir::setPath(const std::filesystem::path &path)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static] void QDir::setSearchPaths(const QString &prefix, const QStringList &searchPaths)
将 Qt XML 针对文件名以prefix 为前缀的搜索路径设置或替换为searchPaths 。
要指定文件名前缀,请在前缀后添加一个冒号(例如,“images:undo.png”、“xmldocs:books.xml”)。prefix 只能包含字母或数字(例如,不能包含冒号或斜杠)。
Qt 使用此搜索路径来查找带有已知前缀的文件。搜索路径中的条目将按顺序进行检查,从第一个条目开始。
QDir::setSearchPaths("icons", QStringList(QDir::homePath() + "/images"));
QDir::setSearchPaths("docs", QStringList(":/embeddedDocuments"));
//...
QPixmap pixmap("icons:undo.png"); // will look for undo.png in QDir::homePath() + "/images"
QFile file("docs:design.odf"); // will look in the :/embeddedDocuments resource path文件名前缀必须至少包含 2 个字符,以避免与 Windows 驱动器盘符发生冲突。
搜索路径可能包含指向Qt 资源系统的路径。
另请参阅 searchPaths()。
void QDir::setSorting(QDir::SortFlags sort)
设置entryList()和entryInfoList()所使用的排序顺序。
sort 通过将枚举QDir::SortFlag 中的值进行按“或”运算来指定。
QDir::SortFlags QDir::sorting() const
返回由setSorting() 设置的值
另请参阅 setSorting() 和SortFlag 。
[noexcept] void QDir::swap(QDir &other)
将此QDir 实例替换为other 。此操作速度极快,且绝不会失败。
[static] QDir QDir::temp()
返回系统的临时目录。
该目录使用临时目录的绝对规范路径构建,从而确保其path() 与absolutePath() 的结果相同。
详情请参见tempPath()。
另请参阅 drives()、current()、home() 和root()。
[static] QString QDir::tempPath()
返回系统临时目录的绝对规范路径。
在 Unix/Linux 系统上,该路径即为环境变量TMPDIR 中的路径;若未定义TMPDIR ,则为/tmp 中的路径。在 Windows 系统上,该路径通常为环境变量TEMP 或TMP 中的路径。除非是(驱动器的)根目录,否则此方法返回的路径末尾不会带有目录分隔符。
另请参阅 temp()、currentPath()、homePath() 和rootPath()。
[static] QString QDir::toNativeSeparators(const QString &pathName)
返回pathName ,其中“/”分隔符已被转换为适合底层操作系统的分隔符。
在 Windows 上,toNativeSeparators("c:/winnt/system32") 返回 "c:\winnt\system32 "。
在某些操作系统上(例如 Unix),返回的字符串可能与参数相同。
另请参阅 fromNativeSeparators() 和separator()。
[noexcept] QDir &QDir::operator=(QDir &&other)
将other 通过Move操作赋值给此QDir 实例。
QDir &QDir::operator=(const QDir &dir)
复制dir 对象,并将副本赋值给此QDir 对象。
QString QDir::operator[](qsizetype pos) const
返回文件名列表中位于位置pos 的文件名。等同于entryList().at(index)。pos 必须是列表中的有效索引位置(即 0 <= pos <count())。
注意:在 Qt 6.5 之前的版本中,pos 属于int 类型,而非qsizetype 类型。
相关的非成员
[noexcept] bool operator!=(const QDir &lhs, const QDir &rhs)
如果目录lhs 和目录rhs 的路径不同,或者排序或筛选设置不同,则返回true ;否则返回false 。
示例:
// 当前目录为 "/usr/local"
QDir d1("/usr/local/bin");
d1.setFilter(QDir::可执行文件);
QDir d2("bin");
if(d1!=d2)
qDebug("They differ");[noexcept] bool operator==(const QDir &lhs, const QDir &rhs)
如果目录lhs 和目录rhs 的路径相同,且它们的排序和过滤设置也相同,则返回true ;否则返回false 。
示例:
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.