QDir Class
QDir 类提供对目录结构及其内容的访问。更多
头文件: | #include <QDir> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- 所有成员(包括继承成员)的列表
- 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() |
(since 6.3) bool | mkdir(const QString &dirName, QFileDevice::Permissions permissions) const |
bool | mkdir(const QString &dirName) const |
bool | mkpath(const QString &dirPath) 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 转换为绝对路径。
注意: 以冒号(:)开头的路径总是被视为绝对路径,因为它们表示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() 的字符串列表。属性过滤器由过滤器的 bitwise OR 组合组成,在调用setFilter() 时指定。排序顺序通过setSorting() 和SortFlags 的位顺时针 OR 组合来指定。
您可以使用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() )。
遍历目录并读取文件:
QDirdir=QDir::root();// "/"if(!dir.cd("tmp")) {// "/tmp" qWarning("Cannot find the \"/tmp\" directory"); }else{ QFilefile(dir.filePath("ex1.txt"));// "/tmp/ex1.txt" if(!file.open(QIODevice::ReadWrite)) qWarning("Cannot create the file %s", file.name()); }
该程序可列出当前目录下的所有文件(不包括符号链接),按大小排序,最小的在前:
#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; }
平台特定问题
在 Android 上,处理内容 URI 时会受到一些限制:
- 访问权限可能需要通过QFileDialog 提示用户,该程序实现了Android 的本地文件选择器。
- 尽量遵循范围存储指南,例如使用应用程序特定目录而不是其他公共外部目录。如需了解更多信息,请参阅存储最佳实践。
- 由于 Qt API(如QFile )的设计原因,无法将后者的 API 与 Android 的MediaStoreAPI 完全集成。
另请参阅 QFileInfo,QFile,QFileDialog,QCoreApplication::applicationDirPath() 和Fetch More Example。
成员类型文档
枚举 QDir::Filter
flags QDir::Filters
该枚举描述了QDir 可用的过滤选项;例如,用于entryList() 和entryInfoList() 的过滤选项。过滤值是通过使用位顺时针 OR 运算符组合以下列表中的值来指定的:
常量 | 值 | 说明 |
---|---|---|
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 | 列出目录、文件、驱动器和符号链接(除非指定 "系统",否则不会列出损坏的符号链接)。 |
QDir::Readable | 0x010 | 列出应用程序具有读取权限的文件。可读值需要与目录或文件结合使用。 |
QDir::Writable | 0x020 | 列出应用程序有写入权限的文件。Writable 值需要与 Dirs 或 Files 结合使用。 |
QDir::Executable | 0x040 | 列出应用程序有执行权限的文件。Executable 值需要与 Dirs 或 Files 结合使用。 |
QDir::Modified | 0x080 | 只列出已修改的文件(在 Unix 上忽略)。 |
QDir::Hidden | 0x100 | 列出隐藏文件(在 Unix 上,以". "开头的文件)。 |
QDir::System | 0x200 | 列出系统文件(在 Unix 上,包括 FIFO、套接字和设备文件;在 Windows 上,包括.lnk 文件) |
QDir::CaseSensitive | 0x800 | 过滤器应区分大小写。 |
除非设置了 NoSymLinks 值,否则使用 Filter 枚举值过滤文件和目录列表的函数将包含文件和目录的符号链接。
默认构造的QDir 不会根据权限过滤文件,因此entryList() 和entryInfoList() 将返回所有可读、可写、可执行或三者任意组合的文件。这使得默认值易于编写,同时也非常有用。
例如,通过设置Readable
、Writable
和Files
标志,可以列出应用程序具有读取、写入或两种访问权限的所有文件。如果在此组合中还包含Dirs
和Drives
标志,则可以列出所有驱动器、目录、应用程序可以读取、写入或执行的所有文件,以及指向这些文件/目录的符号链接。
要获取一个目录的权限,可使用entryInfoList() 函数获取相关的QFileInfo 对象,然后使用QFileInfo::permissions() 获取每个文件的权限和所有权。
Filters 类型是QFlags<Filter> 的类型定义。它存储过滤器值的 OR 组合。
枚举 QDir::SortFlag
flags QDir::SortFlags
该枚举描述了QDir 可用的排序选项,例如entryList() 和entryInfoList() 的排序选项。排序值由以下列表中的值 OR- 连接指定:
常量 | 值 | 说明 |
---|---|---|
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> 的类型定义。它存储 SortFlag 值的 OR 组合。
成员函数文档
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,使用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,使用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() 相同的字符串。如果不存在规范路径(通常是由于悬挂符号链接),canonicalPath() 将返回空字符串。
示例
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()。
注意: 在 6.5 之前的 Qt 版本中,此函数返回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 参数覆盖。
如果目录不可读、不存在或没有任何内容符合规范,则返回空列表。
另请参阅 entryList()、setNameFilters()、setSorting()、setFilter()、isReadable() 和exists()。
QFileInfoList QDir::entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
这是一个重载函数。
返回目录中所有文件和目录的QFileInfo 对象列表,根据setNameFilters() 和setFilter() 设置的名称和属性筛选器排序,并根据setSorting() 设置的标志排序。
使用filters 和sort 参数可以覆盖属性筛选器和排序规范。
如果目录不可读、不存在或没有任何内容符合规范,则返回空列表。
另请参阅 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 参数覆盖。
如果目录不可读、不存在或没有任何内容符合规范,则返回空列表。
另请参阅 entryInfoList()、setNameFilters()、setSorting() 和setFilter()。
QStringList QDir::entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
这是一个重载函数。
返回目录中所有文件和目录的名称列表,根据setNameFilters() 和setFilter() 设置的名称和属性筛选器排序,并根据setSorting() 设置的标志排序。
使用filters 和sort 参数可以覆盖属性筛选器和排序规范。
如果目录无法读取、不存在或没有任何内容符合规范,则返回空列表。
注意: 要列出指向不存在文件的符号链接,必须向过滤器传递System 。
另请参阅 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() ,例如
[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()。
[since 6.3]
bool QDir::mkdir(const QString &dirName, QFileDevice::Permissions permissions) const
用给定的permissions 创建名为dirName 的子目录。
成功时返回true
;如果操作失败或目录已存在,则返回false
。
在 POSIX 系统中,permissions 由当前进程的 umask
(文件创建掩码)修改,这意味着某些权限位可能会被禁用。
在 Windows 系统中,默认情况下,新目录会继承父目录的权限。permissions 使用 ACL 进行模拟。当组被授予的权限少于其他组时,这些 ACL 的顺序可能不规范。打开 "属性 "对话框的 "安全 "选项卡时,具有此类权限的文件和目录将产生警告。授予组其他成员所有权限可避免此类警告。
此功能在 Qt 6.3 中引入。
另请参阅 rmdir()、mkpath() 和rmpath()。
bool QDir::mkdir(const QString &dirName) const
这是一个重载函数。
创建名为dirName 的子目录,该子目录具有特定平台的默认权限。
成功时返回true
;如果操作失败或目录已存在,则返回false
。
在 Windows 系统中,默认情况下,新目录会继承父目录的权限。权限使用 ACL 模拟。当组被授予的权限少于其他组时,这些 ACL 的顺序可能不规范。打开 "属性 "对话框的 "安全 "选项卡时,具有此类权限的文件和目录将产生警告。授予组其他成员所有权限可避免此类警告。
另请参阅 rmdir()、mkpath() 和rmpath()。
bool QDir::mkpath(const QString &dirPath) const
创建名为dirPath 的目录。
如果dirPath 尚不存在,本方法将创建该目录以及任何不存在的父目录,并使用默认权限。
如果成功或dirPath 已经存在,则返回true
;否则返回false
。
在 Windows 系统中,默认情况下,新目录会继承父目录的权限。权限使用 ACL 模拟。当组被授予的权限少于其他组时,这些 ACL 的顺序可能不规范。打开 "属性 "对话框的 "安全 "选项卡时,具有此类权限的文件和目录将产生警告。授予组其他成员所有权限可避免此类警告。
另请参阅 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
。
在大多数文件系统中,只有当oldName 不存在或新名称的文件已经存在时,rename() 才会失败。不过,rename() 失败也有其他原因。例如,在至少一个文件系统上,如果newName 指向一个打开的文件,rename() 就会失败。
如果oldName 是一个无法立即重命名的文件(而不是目录),Qt XML 会尝试将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 对带有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 中的值 OR-ing 指定。
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)
Move-assignsother 到此QDir 实例。
QDir &QDir::operator=(const QDir &dir)
复制dir 对象并将其赋值给QDir 对象。
QString QDir::operator[](qsizetype pos) const
返回文件名列表中pos 位置的文件名。等同于entryList().at(index).pos 必须是列表中有效的索引位置(即 0 <= pos <count() )。
注意: 在 6.5 之前的 Qt 版本中,pos 是int
,而不是qsizetype
。
相关非成员
[noexcept]
bool operator!=(const QDir &lhs, const QDir &rhs)
如果目录lhs 和目录rhs 的路径不同或排序或过滤设置不同,则返回true
;否则返回false
。
示例
// 当前目录为"/usr/localQDird1("/usr/local/bin"); d1.setFilter(QDir::Executable);QDird2("bin");if(d1!=d2) qDebug("They differ");
[noexcept]
bool operator==(const QDir &lhs, const QDir &rhs)
如果目录lhs 和目录rhs 的路径相同,排序和过滤设置也相同,则返回true
;否则返回false
。
示例
© 2025 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.