QDir 类

QDir 类提供了对目录结构和其内容的访问。更多...

头文件 #include <QDir>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意: 此类中所有函数都是 重新入 的。

公共类型

枚举Filter { Dirs, AllDirs, Files, Drives, NoSymLinks, …, CaseSensitive }
标志Filters
枚举SortFlag { Name, Time, Size, Type, Unsorted, …, LocaleAware }
标志SortFlags

公共函数

QDir(const QString &path = QString())
QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
(自 6.0 版起) QDir(const std::filesystem::path &path)
(自 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()
QStringabsoluteFilePath(const QString &fileName) const
QStringabsolutePath() const
QStringcanonicalPath() const
boolcd(const QString &dirName)
boolcdUp()
qsizetypecount() const
QStringdirName() const
QFileInfoListentryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
QFileInfoListentryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
QStringListentryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
QStringListentryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
boolexists(const QString &name) const
boolexists() const
QStringfilePath(const QString &fileName) const
(自 6.0 版起) std::filesystem::pathfilesystemAbsolutePath() const
(自 6.0 版起) std::filesystem::pathfilesystemCanonicalPath() const
(自 6.0 版起) std::filesystem::pathfilesystemPath() const
QDir::Filtersfilter() const
boolisAbsolute() const
boolisEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const
boolisReadable() const
boolisRelative() const
boolisRoot() const
boolmakeAbsolute()
(since 6.3) boolmkdir(const QString &dirName, QFileDevice::Permissions permissions) const
boolmkdir(const QString &dirName) const
boolmkpath(const QString &dirPath) const
QStringListnameFilters() const
QStringpath() const
voidrefresh() const
QStringrelativeFilePath(const QString &fileName) const
boolremove(const QString &fileName)
boolremoveRecursively()
boolrename(const QString &oldName, const QString &newName)
boolrmdir(const QString &dirName) const
boolrmpath(const QString &dirPath) const
voidsetFilter(QDir::Filters filters)
voidsetNameFilters(const QStringList &nameFilters)
voidsetPath(const QString &path)
(since 6.0) voidsetPath(const std::filesystem::path &path)
voidsetSorting(QDir::SortFlags sort)
QDir::SortFlagssorting() const
voidswap(QDir &other)
booloperator!=(const QDir &dir) const
QDir &operator=(const QDir &dir)
QDir &operator=(QDir &&other)
booloperator==(const QDir &dir) const
QStringoperator[](qsizetype pos) const

静态公有成员

voidaddSearchPath(const QString &prefix, const QString &path)
(since 6.0) voidaddSearchPath(const QString &prefix, const std::filesystem::path &path)
QStringcleanPath(const QString &path)
QDircurrent()
QStringcurrentPath()
QFileInfoListdrives()
QStringfromNativeSeparators(const QString &pathName)
QDirhome()
QStringhomePath()
boolisAbsolutePath(const QString &path)
boolisRelativePath(const QString &path)
QCharlistSeparator()
boolmatch(const QString &filter, const QString &fileName)
boolmatch(const QStringList &filters, const QString &fileName)
QDirroot()
QStringrootPath()
QStringListsearchPaths(const QString &prefix)
QCharseparator()
boolsetCurrent(const QString &path)
voidsetSearchPaths(const QString &prefix, const QStringList &searchPaths)
QDirtemp()
QStringtempPath()
QStringtoNativeSeparators(const QString &pathName)

详细描述

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

Qt使用"/"作为通用的目录分隔符,就像URL中使用"/"作为路径分隔符一样。如果您始终使用"/"作为目录分隔符,Qt将翻译您的路径以符合底层操作系统。

QDir可以使用相对路径或绝对路径指向一个文件。绝对路径以目录分隔符开始(Windows下可选带有驱动器指定)。相对文件名以目录名或文件名开始,并指定相对于当前目录的路径。

绝对路径的示例

QDir("/home/user/Documents")
QDir("C:/Users")

在Windows上,上述第二个示例在用于访问文件时将被翻译为C:\Users

相对路径的示例

QDir("images/landscape.png")

您可以使用isRelative()或isAbsolute()函数来检查QDir是否使用相对路径或绝对文件路径。调用makeAbsolute()将相对的QDir转换为绝对路径。

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

可以通过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()函数将从磁盘重新读取目录的数据。

文件和目录内容

目录包含一些条目,代表文件、目录和符号链接。返回目录条目数的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()的字符串列表。属性过滤器由多个Filter的按位或组合构成,这些在调用setFilter()时指定。排序顺序使用setSorting()指定,是以SortFlags的按位或组合的形式的。

您可以使用match()函数测试文件名是否与过滤器匹配。

调用entryList()和entryInfoList()时,也可以指定过滤器和排序顺序标志,以覆盖之前定义的行为。

当前目录和其他特殊路径

有一组静态函数提供了对一些常见目录的访问权限,这些函数返回QDir对象。也有这些对应的返回字符串的函数。

QDirQString返回值
current()currentPath()应用程序的工作目录
home()homePath()用户的家庭目录
root()rootPath()根目录
temp()tempPath()系统临时目录

可以使用静态的setCurrent()函数来设置应用程序的工作目录。

如果您想找到应用程序的可执行文件所在的目录,请参阅QCoreApplication::applicationDirPath

drives()静态函数为包含文件系统的每个设备提供了根目录的列表。在Unix系统中,这会返回包含单个根目录"/"的列表;在Windows中,列表通常会包含C:/,以及可能的其他驱动器字母,如D:/,具体取决于用户系统的配置。

路径操作和字符串

包含"."元素(在路径的该点引用当前目录)、".."元素(引用父目录)和符号链接的路径可以使用canonicalPath()函数简化为规范形式。

路径也可以通过使用cleanPath()来简化,这可以删除多余的"/"和".."元素。

有时需要能够在用户平台的本地表示中显示路径。静态toNativeSeparators()函数返回指定路径的副本,其中每个目录分隔符都替换为底层操作系统的适当分隔符。

示例

检查目录是否存在

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

(我们也可以使用以下静态便利函数之一: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", 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时存在一些限制。

另请参阅QFileInfoQFileQFileDialogQCoreApplication::applicationDirPath()和Fetch More Example

成员类型文档

枚举QDir::Filter
flags QDir::Filters

此枚举描述了QDir可用的过滤选项;例如对entryList()和entryInfoList()。过滤值通过使用位或运算符组合以下列表中的值来指定

常量描述
QDir::Dirs0x001列出匹配过滤器的目录。
QDir::AllDirs0x400列出所有目录;即不对目录名称应用过滤器。
QDir::Files0x002列出文件。
QDir::Drives0x004列出磁盘驱动器(在Unix下被忽略)。
QDir::NoSymLinks0x008不要列出符号链接(在不支持符号链接的操作系统上被忽略)。
QDir::NoDotAndDotDotNoDot | NoDotDot不要列出特殊条目 "." 和 ".."。
QDir::NoDot0x2000不要列出特殊条目 "."。
QDir::NoDotDot0x4000不要列出特殊条目 ".."。
QDir::AllEntriesDirs | Files | Drives列出目录、文件、驱动器和符号链接(除非您指定系统,否则不会列出损坏的符号链接)。
QDir::Readable0x010列出应用程序具有读访问权的文件。Readable的值需要与Dirs或Files组合。
QDir::Writable0x020列出应用程序具有写访问权的文件。Writable的值需要与Dirs或Files组合。
QDir::Executable0x040列出应用程序具有执行访问权的文件。Executable的值需要与Dirs或Files组合。
QDir::Modified0x080仅列出被修改的文件(在Unix下被忽略)。
QDir::Hidden0x100列出隐藏文件(在Unix中,以下划线开头的文件)。
QDir::System0x200列出系统文件(在Unix中包括FIFOs、套接字和设备文件;在Windows中包括.lnk文件)。
QDir::CaseSensitive0x800过滤器应区分大小写。

使用 Filter 枚举值过滤文件和目录列表的功能将包含文件的符号链接和目录链接,除非你设置了 NoSymLinks 值。

默认构造的 QDir 将不根据其权限过滤文件,因此 entryList() 和 entryInfoList() 将返回所有可读、可写、可执行或这三种组合中的任意一种的文件。这使得默认设置易于编写,同时具有实用性。

例如,设置 ReadableWritableFiles 标志允许列出应用程序具有读取、写入或两者兼顾权限的所有文件。如果在此组合中包括 DirsDrives 标志,则可以列出所有驱动器、目录以及应用程序可以读取、写入或执行的所有文件,以及指向此类文件/目录的符号链接。

要检索目录的权限,请使用 entryInfoList() 函数获取相关的 QFileInfo 对象,然后使用 QFileInfo::permissions() 获取每个文件的权限和所属权。

Filters 类型是 QFlags<Filter> 的同义词。它存储 Filter 值的 OR 组合。

enum QDir::SortFlag
flags QDir::SortFlags

此枚举描述了 QDir 可用的排序选项,例如对于 entryList() 和 entryInfoList()。排序值通过从以下列表中组合值来指定

常量描述
QDir::Name0x00按名称排序。
QDir::Time0x01按时间(修改时间)排序。
QDir::Size0x02按文件大小排序。
QDir::Type0x80按文件类型(扩展名)排序。
QDir::Unsorted0x03不排序。
QDir::NoSort-1默认不排序。
QDir::DirsFirst0x04首先是目录,然后是文件。
QDir::DirsLast0x20首先是文件,然后是目录。
QDir::Reversed0x08反转排序顺序。
QDir::IgnoreCase0x10不区分大小写排序。
QDir::LocaleAware0x40使用当前区域设置适当的设置对项进行排序。

您只能指定前四个中的一个。

如果您指定了 DirsFirst 和 Reversed,则目录仍然首先列出,但以相反的顺序;文件将列在目录之后,也以相反的顺序列出。

SortFlags 类型是 QFlags<SortFlag> 的同义词。它存储 SortFlag 值的 OR 组合。

成员函数文档

QDir::QDir(const QString &path = QString())

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

另请参阅currentPath()。

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

使用路径 path、名称过滤器 nameFilter 和过滤器 filters 过滤条目并排序名称。

默认的 nameFilter 是一个空字符串,这意味着不会排除任何项目;默认的 filtersAllEntries,这意味着也不会排除任何项目。默认的 sortName | IgnoreCase,即按名称不区分大小写排序。

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

注意: path 不必存在。

另请参阅: exists(),setPath(),setNameFilters(),setFilter() 和 setSorting

[since 6.0] QDir::QDir(const std::filesystem::path &path)

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

该函数自 Qt 6.0 以来引入。

另请参阅currentPath()。

[since 6.0] QDir::QDir(const std::filesystem::path &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)

使用路径 path、名称过滤器 nameFilter 和过滤器 filters 过滤条目并排序名称。

默认的 nameFilter 是一个空字符串,这意味着不会排除任何项目;默认的 filtersAllEntries,这意味着也不会排除任何项目。默认的 sortName | IgnoreCase,即按名称不区分大小写排序。

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

注意: path 不必存在。

该函数自 Qt 6.0 以来引入。

另请参阅: exists(),setPath(),setNameFilters(),setFilter() 和 setSorting

QDir::QDir(const QDir &dir)

构造一个复制目录 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

[静态,自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()。

另请参阅cdUpisReadableexistspath

bool QDir::cdUp()

将目录移动到QDir的当前目录上方一个目录。

如果新目录存在,则返回true;否则返回false。请注意,如果新目录不存在,则不执行cdUp()的逻辑操作。

注意:在Android上,不支持对内容URI使用此功能。有关更多信息,请参阅DocumentFile.getParentFile()

另请参阅cdisReadableexistspath

[静态] 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().

[静态] QDir QDir::current()

返回应用程序当前目录。

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

另请参阅 currentPath(),setCurrent(),home(),root() 和 temp()。

[静态] 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()。

[静态] QFileInfoList QDir::drives()

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

在 Windows 上,它返回包含 "C:/"、"D:/" 等的 QFileInfo 对象列表。它不会返回具有可移动媒体但为空的驱动器。在其他操作系统中,它返回只包含一个根目录的列表(即 “/”)。

另请参阅 root() 和 rootPath()。

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

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

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

如果目录不可读、不存在或没有匹配规范,则返回空列表。

另请参阅 entryList(),setNameFilters(),setSorting(),setFilter(),isReadable()以及exists()。

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

这是一个重载函数。

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

可以使用filterssort参数来重写属性过滤器排序规范。

如果目录不可读、不存在或没有匹配规范,则返回空列表。

另请参阅 entryList(),setNameFilters(),setSorting(),setFilter(),isReadable()以及exists()。

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

返回目录中所有文件和目录的名称列表,按先前用setNameFilters()和setFilter()设置的名称和属性过滤器排序,按用setSorting()设置的标志排序。

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

如果目录不可读、不存在或没有匹配规范,则返回空列表。

另请参阅 entryInfoList(),setNameFilters(),setSorting()以及setFilter()。

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

这是一个重载函数。

返回目录中所有文件和目录的名称列表,按先前用setNameFilters()和setFilter()设置的名称和属性过滤器排序,按用setSorting()设置的标志排序。

可以使用filterssort参数来重写属性过滤器排序规范。

如果目录不可读、不存在或没有匹配规范,则返回空列表。

注意:要列出指向不存在文件的符号链接,必须在过滤器中传递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是相对的,则返回的路径名也将是相对的。不会移除文件名中的冗余多个分隔符、“.”和“..”目录(请参阅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()。

[静态] QString QDir::fromNativeSeparators(const QString &pathName)

使用 '/' 作为文件分隔符返回 pathName。例如,在 Windows 上,fromNativeSeparators("c:\\winnt\\system32") 返回 "c:/winnt/system32"。

在某些操作系统上,返回的字符串可能与参数相同,例如在 Unix 上。

另请参阅 toNativeSeparators() 和 separator()。

[静态] QString QDir::home()

返回用户的家目录。

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

请参阅 homePath() 以获取详细信息。

另请参阅 drives(),current(),root() 和 temp()。

[静态] QString QDir::homePath()

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

在 Windows 上,此函数将返回当前用户配置文件的目录。通常情况下,它是

C:/Users/Username

使用 toNativeSeparators() 函数将分隔符转换为适合底层操作系统的分隔符。

如果当前用户的配置文件目录不存在或无法检索,则将检查以下替代方案(按给定顺序),直到找到现有且可用的路径

  1. USERPROFILE 环境变量指定的路径。
  2. HOMEDRIVEHOMEPATH 环境变量连接形成的路径。
  3. HOME 环境变量指定的路径。
  4. rootPath() 函数返回的路径(它使用 SystemDrive 环境变量)
  5. C:/ 目录。

在非Windows操作系统下,如果存在,将使用HOME环境变量,否则返回rootPath()()返回的路径。

另请参阅 home()、currentPath()、rootPath()和tempPath().

bool QDir::isAbsolute() const

如果目录路径是绝对的,则返回true;否则返回false。参阅isAbsolutePath().

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

另请参阅 isRelative()、makeAbsolute()和cleanPath().

[静态] 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

警告:此函数返回的假值并不能保证目录中的文件不可访问。

另请参阅 QFileInfo::isReadable().

bool QDir::isRelative() const

如果目录路径是相对的,则返回true;否则返回false。(在Unix中,如果路径不以"/"开始,则它就是相对路径。)

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

另请参阅 makeAbsolute()、isAbsolute()、isAbsolutePath()和cleanPath().

[静态] 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");

另请参阅 root() 和 rootPath()。

[静态常量 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,否则返回 falsefilter 可以包含由空格或分号分隔的多个模式。匹配不区分大小写。

另请参阅QRegularExpression::fromWildcard()、entryList() 和 entryInfoList()。

[static] bool QDir::match(const QStringList &filters, const QString &fileName)

这是一个重载函数。

如果 fileNamefilters 列表中的任何通配符(glob)模式匹配,则返回 true,否则返回 false。匹配不区分大小写。

另请参阅QRegularExpression::fromWildcard()、entryList() 和 entryInfoList()。

[since 6.3] bool QDir::mkdir(const QString &dirName, QFileDevice::Permissions permissions) const

创建名为 dirName 的子目录。

成功则返回 true,失败则返回 false

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

创建的目录权限被设置为 permissions

在POSIX系统上,权限受 umask 值的影响。

在Windows上,通过ACLs模拟权限。当组被授予比其他人更少的权限时,这些ACLs可能不是规范顺序。具有此类权限的文件和目录在打开属性对话框的安全选项卡时将生成警告。授予组与其他人相同的所有权限可以避免这些警告。

此函数是在Qt 6.3中引入的。

另请参阅rmdir()。

bool QDir::mkdir(const QString &dirName) const

这是一个重载函数。

使用默认权限创建名为 dirName 的子目录。

在POSIX系统上,默认情况下授予由 umask 允许的所有权限。在Windows上,新目录从父目录继承权限。

bool QDir::mkpath(const QString &dirPath) const

创建目录路径 dirPath

此函数将创建所有必要的上级目录来创建目录。

如果成功则返回 true;如果失败则返回 false

如果在调用此函数时路径已存在,则返回 true。

另请参阅rmpath

QStringList QDir::nameFilters() const

返回由 setNameFilters() 设置的字符串列表。

另请参阅setNameFilters

QString QDir::path() const

返回路径。这可能会包含符号链接,但永远不会包含冗余的 ".","..", 或多个分隔符。

返回的路径可以是绝对路径或相对路径(请参阅 setPath)。

另请参阅setPathabsolutePathexistscleanPathdirNameabsoluteFilePathtoNativeSeparators,以及 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"

另请参阅absoluteFilePathfilePath,以及 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

[静态] QDir QDir::root()

返回根目录。

目录是通过根目录的绝对路径构建的,确保其path()将与absolutePath()相同。

参见rootPath()获取详细信息。

参见drives()、current()、home()和temp

[静态] QString QDir::rootPath()

返回根目录的绝对路径。

对于Unix操作系统,此返回值为"/"。对于Windows文件系统,通常返回".scalablytyped

参见root()、drives()、currentPath()、homePath()和tempPath

[静态] QStringList QDir::searchPaths(const QString &prefix)

返回prefix的搜索路径。

参见setSearchPaths()和addSearchPath

[静态] QChar QDir::separator()

返回本地目录分隔符:Unix下为"/",Windows下为"\"。

您不需要使用此函数构建文件路径。如果您始终使用"/",Qt会将其路径转换为符合底层操作系统的格式。如果您想要使用操作系统分隔符显示路径给用户,请使用toNativeSeparators

参见listSeparator

[静态] bool QDir::setCurrent(const QString &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 以来引入。

[静态] void QDir::setSearchPaths(const QString &prefix, const QStringList &searchPaths)

设置或替换Qt的文件名搜索路径,用于具有前缀prefixsearchPaths

为了指定文件名的前缀,将前缀和单个冒号一起使用(例如,“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()使用的排序顺序。

排序通过将枚举QDir::SortFlag的值进行OR操作来指定。

参见sorting()和SortFlag

QDir::SortFlags QDir::sorting() const

返回由setSorting()设置的值

参见setSorting()和SortFlag

[noexcept] void QDir::swap(QDir &other)

与本QDir实例交换其他实例。此函数非常快速且从不失败。

[static] QDir QDir::temp()

返回系统的临时目录。

该目录使用临时目录的绝对规范路径构建,确保其path()将与其absolutePath()相同。

有关详情,请参见tempPath

参见drivescurrenthomeroot

[static] QString QDir::tempPath()

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

在Unix/Linux系统中,这是在TMPDIR环境变量中的路径或如果未定义则为/tmp。在Windows中,这通常是TEMPTMP环境变量中的路径。此方法返回的路径不以目录分隔符结尾,除非它是(驱动器)的根目录。

参见tempcurrentPathhomePathrootPath

[static] QString QDir::toNativeSeparators(const QString &pathName)

返回将pathName中的'/'分隔符转换为适合底层操作系统的分隔符的路径。

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

在某些操作系统上,返回的字符串可能与参数相同,例如在 Unix 上。

参见fromNativeSeparatorsseparator

bool QDir::operator!=(const QDir &dir) const

如果目录dir和此目录的路径或排序或过滤器设置不同,则返回true;否则返回false。

示例

// The current directory is "/usr/local"
QDir d1("/usr/local/bin");
d1.setFilter(QDir::Executable);
QDir d2("bin");
if (d1 != d2)
    qDebug("They differ");

QDir &QDir::operator=(const QDir &dir)

复制dir对象并将其分配给此QDir对象。

[noexcept] QDir &QDir::operator=(QDir &&other)

other移动分配给此QDir实例。

bool QDir::operator==(const QDir &dir) const

如果目录dir与当前目录的路径相同且它们排序和过滤器设置相同,则返回true;否则返回false

示例

// The current directory is "/usr/local"
QDir d1("/usr/local/bin");
QDir d2("bin");
if (d1 == d2)
    qDebug("They're the same");

QString QDir::operator[](qsizetype pos) const

返回文件名列表中位置pos处的文件名。相当于entryList().at(index)。 pos必须是列表中的有效索引位置(即,0 <= pos < count()).

注意:在Qt 6.5之前的版本中,posint类型,而不是qsizetype

另请参阅:count() 和 entryList()。

© 2024 The Qt Company Ltd. 本文档中的文档贡献权属于其各自的拥有者。本文档按自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可。Qt及其相应的标志是芬兰的Qt Company Ltd.以及全球其他国家的商标。所有其他商标均为各自所有者的财产。