本页内容

QFileInfo Class

QFileInfo 类提供了一个与操作系统无关的 API,用于获取文件系统条目的信息。更多内容...

头文件: #include <QFileInfo>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入函数。

QFileInfo 的比较

类别可比较类型
相等性QFileInfo

公共函数

QFileInfo()
QFileInfo(const QFileDevice &file)
QFileInfo(const QString &path)
(since 6.0) QFileInfo(const std::filesystem::path &file)
QFileInfo(const QDir &dir, const QString &path)
(since 6.0) QFileInfo(const QDir &dir, const std::filesystem::path &path)
QFileInfo(const QFileInfo &fileinfo)
(since 6.12) QFileInfo(QFileInfo &&other)
~QFileInfo()
QDir absoluteDir() const
QString absoluteFilePath() const
QString absolutePath() const
QString baseName() const
QDateTime birthTime() const
(since 6.6) QDateTime birthTime(const QTimeZone &tz) const
QString bundleName() const
bool caching() const
QString canonicalFilePath() const
QString canonicalPath() const
QString completeBaseName() const
QString completeSuffix() const
QDir dir() const
bool exists() const
QString fileName() const
QString filePath() const
QDateTime fileTime(QFileDevice::FileTime time) const
(since 6.6) QDateTime fileTime(QFileDevice::FileTime time, const QTimeZone &tz) const
(since 6.0) std::filesystem::path filesystemAbsoluteFilePath() const
(since 6.0) std::filesystem::path filesystemAbsolutePath() const
(since 6.0) std::filesystem::path filesystemCanonicalFilePath() const
(since 6.0) std::filesystem::path filesystemCanonicalPath() const
(since 6.0) std::filesystem::path filesystemFilePath() const
(since 6.2) std::filesystem::path filesystemJunctionTarget() const
(since 6.0) std::filesystem::path filesystemPath() const
(since 6.6) std::filesystem::path filesystemReadSymLink() const
(since 6.0) std::filesystem::path filesystemSymLinkTarget() const
QString group() const
uint groupId() const
bool isAbsolute() const
(since 6.4) bool isAlias() const
bool isBundle() const
bool isDir() const
bool isExecutable() const
bool isFile() const
bool isHidden() const
bool isJunction() const
bool isNativePath() const
(since 6.10) bool isOther() const
bool isReadable() const
bool isRelative() const
bool isRoot() const
bool isShortcut() const
bool isSymLink() const
bool isSymbolicLink() const
bool isWritable() const
(since 6.2) QString junctionTarget() const
QDateTime lastModified() const
(since 6.6) QDateTime lastModified(const QTimeZone &tz) const
QDateTime lastRead() const
(since 6.6) QDateTime lastRead(const QTimeZone &tz) const
bool makeAbsolute()
QDateTime metadataChangeTime() const
(since 6.6) QDateTime metadataChangeTime(const QTimeZone &tz) const
QString owner() const
uint ownerId() const
QString path() const
bool permission(QFileDevice::Permissions permissions) const
QFileDevice::Permissions permissions() const
(since 6.6) QString readSymLink() const
void refresh()
void setCaching(bool enable)
void setFile(const QString &path)
(since 6.0) void setFile(const std::filesystem::path &path)
void setFile(const QFileDevice &file)
void setFile(const QDir &dir, const QString &path)
qint64 size() const
(since 6.0) void stat()
QString suffix() const
void swap(QFileInfo &other)
QString symLinkTarget() const
QFileInfo &operator=(QFileInfo &&other)
QFileInfo &operator=(const QFileInfo &fileinfo)

静态公共成员

bool exists(const QString &path)
QFileInfoList
bool operator!=(const QFileInfo &lhs, const QFileInfo &rhs)
bool operator==(const QFileInfo &lhs, const QFileInfo &rhs)

宏

详细说明

QFileInfo 提供有关文件系统条目的信息,例如其名称、路径、访问权限,以及它是普通文件、目录还是符号链接。还可以获取该条目的大小以及最后修改/读取时间。QFileInfo 还可用于获取 Qt资源的相关信息。

一个 QFileInfo 可以通过绝对路径或相对路径指向一个文件系统条目:

  • 在 Unix 系统中,绝对路径以目录分隔符'/' 开头。在 Windows 系统中,绝对路径以驱动器标识符开头(例如,D:/ )。
  • 相对路径以目录名或普通文件名开头,并指定了相对于当前工作目录的文件系统条目路径。

绝对路径的示例是字符串"/tmp/quartz" 。相对路径可能如下所示:"src/fatlib" 。您可以使用函数isRelative() 来检查 QFileInfo 是否使用的是相对路径还是绝对路径。您可以调用函数makeAbsolute() 将 QFileInfo 的相对路径转换为绝对路径。

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

QFileInfo 操作的文件系统条目路径可在构造函数中设置,或随后通过setFile() 进行设置。使用exists() 检查该条目是否实际存在,并使用size() 获取其大小。

可通过isFile()、isDir()和isSymLink()获取文件系统条目的类型。symLinkTarget()函数提供符号链接所指向的目标的绝对路径。

文件系统条目的路径元素可通过path()和fileName()提取。fileName()中的各部分可通过baseName()、suffix()或completeSuffix()提取。 由 Qt 类创建的目录对应的 QFileInfo 对象不会带有尾部目录分隔符'/' 。若要在您自己的文件信息对象中使用尾部分隔符,只需在传递给构造函数或setFile() 的条目路径后添加一个分隔符即可。

与日期和时间相关的信息由birthTime()、fileTime()、lastModified()、lastRead() 以及metadataChangeTime() 返回。有关访问权限的信息可通过isReadable()、isWritable() 和isExecutable() 获取。 所有权信息可通过owner()、ownerId()、group() 和groupId() 获取。您还可以使用permission() 函数,通过单个语句同时检查权限和所有权。

在 Unix 系统(包括 macOS 和 iOS)上,该类的属性获取函数返回的是目标(而非符号链接本身)的属性(如时间戳和大小),因为 Unix 系统以透明方式处理符号链接。使用QFile 打开符号链接,实际上就是打开该链接的目标。例如:

#ifdef Q_OS_UNIX

QFileInfo info1("/home/bob/bin/untabify");
info1.isSymLink();          // returns true
info1.absoluteFilePath();   // returns "/home/bob/bin/untabify"
info1.size();               // returns 56201
info1.symLinkTarget();      // returns "/opt/pretty++/bin/untabify"

QFileInfo info2(info1.symLinkTarget());
info2.isSymLink();          // returns false
info2.absoluteFilePath();   // returns "/opt/pretty++/bin/untabify"
info2.size();               // returns 56201

#endif

在 Windows 上,快捷方式(.lnk 文件)目前被视为符号链接。与 Unix 系统一样,属性获取器返回的是目标对象的大小,而非.lnk 文件本身。此行为已被废弃,并可能会在 Qt 的未来版本中移除,届时.lnk 文件将被视为普通文件。

#ifdef Q_OS_WIN

QFileInfo info1("C:\\Users\\Bob\\untabify.lnk");
info1.isSymLink();          // returns true
info1.absoluteFilePath();   // returns "C:/Users/Bob/untabify.lnk"
info1.size();               // returns 63942
info1.symLinkTarget();      // returns "C:/Pretty++/untabify"

QFileInfo info2(info1.symLinkTarget());
info2.isSymLink();          // returns false
info2.absoluteFilePath();   // returns "C:/Pretty++/untabify"
info2.size();               // returns 63942

#endif

NTFS 权限

在 NTFS 文件系统上,出于性能考虑,所有权和权限检查默认处于禁用状态。要启用该功能,请添加以下行:

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;

随后,通过将qt_ntfs_permission_lookup 的值增加或减少1,即可开启或关闭权限检查。

qt_ntfs_permission_lookup++; // turn checking on
qt_ntfs_permission_lookup--; // turn it off again

注意:由于 这是一个非原子全局变量,只有在主线程以外的所有线程尚未启动之前,或者在主线程以外的所有线程均已结束之后,对qt_ntfs_permission_lookup 进行自增或自减操作才是安全的。

注意:从 Qt 6.6开始, 变量qt_ntfs_permission_lookup 已被废弃。请使用以下替代方案。

管理权限检查的安全且简便的方法是使用 RAII 类 `QNtfsPermissionCheckGuard`。

void complexFunction()
{
    QNtfsPermissionCheckGuard permissionGuard;  // check is enabled

    // do complex things here that need permission check enabled

}   // as the guard goes out of scope the check is disabled

如果您需要更精细的控制,也可以使用以下函数来管理权限:

qAreNtfsPermissionChecksEnabled();   // 检查状态
qEnableNtfsPermissionChecks();       // turn checking on
qDisableNtfsPermissionChecks();      // turn it off again

性能注意事项

QFileInfo 的某些函数需要查询文件系统,但出于性能考虑,有些函数仅对路径字符串进行操作。例如:要返回相对路径条目的绝对路径,absolutePath() 必须查询文件系统。而path() 函数则可直接对文件名进行操作,因此速度更快。

QFileInfo 还会缓存其所引用的文件系统条目的信息。由于文件系统可能会被其他用户或程序,甚至同一程序的其他部分所更改,因此提供了一个用于刷新 QFileInfo 中存储信息的函数,即refresh()。 若要关闭 QFileInfo 的缓存功能(即强制其在每次请求信息时都查询底层文件系统),请调用setCaching(false)。

从文件系统获取信息通常需要调用(可能)开销较大的系统函数,因此 QFileInfo(取决于具体实现)在构造时可能不会从文件系统获取所有信息。若要确保所有信息立即从文件系统读取,请使用stat() 成员函数。

birthTime()、fileTime()、lastModified()、lastRead() 和metadataChangeTime() 默认返回本地时间。由于原生文件系统 API 通常使用 UTC,因此需要进行转换。如果您实际上不需要本地时间,可以通过直接在QTimeZone::UTC 中请求时间来避免此问题。

平台特定问题

在 Android 上,处理内容 URI 时存在一些限制:

另请参阅 QDir 和QFile 。

成员函数文档

QFileInfo::QFileInfo()

构建一个不引用任何文件系统条目的空 QFileInfo 对象。

另请参阅 setFile()。

[explicit] QFileInfo::QFileInfo(const QFileDevice &file)

创建一个新的 QFileInfo 对象,用于提供有关文件file 的信息。

如果file 具有相对路径,则该 QFileInfo 也将具有相对路径。

另请参阅 isRelative()。

[explicit] QFileInfo::QFileInfo(const QString &path)

创建一个 QFileInfo 对象,该对象提供位于path 的文件系统条目的信息,该路径可以是绝对路径,也可以是相对路径。

如果path 是相对路径,则该 QFileInfo 也将具有相对路径。

另请参阅 setFile()、isRelative()、QDir::setCurrent() 以及QDir::isRelativePath()。

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

创建一个新的 QFileInfo 对象,用于提供有关给定file 的信息。

该函数在 Qt 6.0 中引入。

另请参阅 setFile()、isRelative()、QDir::setCurrent() 以及QDir::isRelativePath()。

[explicit] QFileInfo::QFileInfo(const QDir &dir, const QString &path)

构建一个新的 QFileInfo 对象,该对象提供关于给定文件系统条目 `path ` 的信息,该条目相对于目录 `dir`。

如果dir 具有相对路径,则 QFileInfo 也将具有相对路径。

如果path 是绝对路径,则dir 指定的目录将被忽略。

另请参阅 isRelative()。

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

创建一个新的 QFileInfo 对象,该对象提供位于path 的文件系统条目信息,该条目相对于目录dir 。

如果dir 是一个相对路径,则 QFileInfo 也将具有相对路径。

如果path 是绝对路径,则会忽略由dir 指定的目录。

该函数在 Qt 6.0 中引入。

QFileInfo::QFileInfo(const QFileInfo &fileinfo)

创建一个新的 QFileInfo 对象,该对象是给定fileinfo 的副本。

[constexpr noexcept default, since 6.12] QFileInfo::QFileInfo(QFileInfo &&other)

从 `other` 移动构造一个新的 `QFileInfo`。

注意: 被移动的对象 other 将处于部分初始化的状态,在此状态下,唯一有效的操作是销毁和赋值。

该函数于 Qt 6.12 中引入。

[noexcept] QFileInfo::~QFileInfo()

销毁QFileInfo 并释放其资源。

QDir QFileInfo::absoluteDir() const

返回一个QDir 对象,该对象表示此QFileInfo 所引用的文件系统条目父目录的绝对路径。

// 假设当前工作目录为 "/home/user/Documents/memos/"
QFileInfo info1(u"relativeFile"_s);
qDebug() << info1.absolutePath(); // "/home/user/Documents/memos/"
qDebug() << info1.baseName(); // "relativeFile"
qDebug() << info1.absoluteDir(); // QDir(u"/home/user/Documents/memos"_s)
qDebug() << info1.absoluteDir().path(); // "/home/user/Documents/memos"

// 目录的 QFileInfo 对象
QFileInfo info2(u"/home/user/Documents/memos"_s);
qDebug() << info2.absolutePath(); // "/home/user/Documents"
qDebug() << info2.baseName(); // "memos"
qDebug() << info2.absoluteDir(); // QDir(u"/home/user/Documents"_s)
qDebug() << info2.absoluteDir().path(); // "/home/user/Documents"

另请参阅 dir()、filePath()、fileName() 以及isRelative()。

QString QFileInfo::absoluteFilePath() const

返回该QFileInfo 所引用的文件系统条目的绝对完整路径,包括该条目的名称。

在 Unix 系统中,绝对路径以目录分隔符'/' 开头。在 Windows 系统中,绝对路径以驱动器标识符开头(例如,D:/ )。

在 Windows 系统中,未映射到驱动器号的网络共享路径以//sharename/ 开头。

QFileInfo 会将驱动器字母转换为大写。请注意,QDir 不会这样做。下面的代码片段展示了这一点。

    QFileInfo fi("c:/temp/foo");
    qDebug() << fi.absoluteFilePath(); // "C:/temp/foo"

该函数的返回结果与filePath()相同,除非isRelative()的值为true。与canonicalFilePath()不同,符号链接或多余的“.”或“..”元素不一定会被移除。

警告:如果 filePath() 为空,则此函数的行为未定义。

另请参阅 filePath()、canonicalFilePath() 和isRelative()。

QString QFileInfo::absolutePath() const

返回该QFileInfo 所引用的文件系统条目的绝对路径,不包括该条目的名称。

在 Unix 系统中,绝对路径以目录分隔符'/' 开头。在 Windows 系统中,绝对路径以驱动器标识符开头(例如,D:/ )。

在 Windows 上,未映射到驱动器号的网络共享路径以//sharename/ 开头。

与canonicalPath() 不同,符号链接或多余的“.”或“..”元素并不一定会被移除。

警告:如果 filePath() 为空,则此函数的行为未定义。

另请参阅 absoluteFilePath()、path()、canonicalPath()、fileName() 以及isRelative()。

QString QFileInfo::baseName() const

返回不包含路径的文件基本名。

文件基名由文件名中所有字符组成,直至(但不包括)第一个“.”字符为止。

示例:

QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.baseName();  // base = "archive"

文件的基本名称在所有平台上的计算方式均一致,与文件命名约定无关(例如,Unix 系统中的 ".bashrc" 文件的基本名称为空,后缀为 "bashrc")。

另请参阅 fileName()、suffix()、completeSuffix() 以及completeBaseName()。

QDateTime QFileInfo::birthTime() const

返回文件创建(生成)时的日期和时间(以本地时间表示)。

如果文件的创建时间不可用,该函数将返回一个无效的QDateTime 。

如果文件是符号链接,则该函数返回目标文件的信息,而不是符号链接本身的信息。

此函数重载了 QFileInfo::birthTime(constQTimeZone &tz),其返回值与birthTime(QTimeZone::LocalTime) 相同。

另请参阅 lastModified()、lastRead()、metadataChangeTime() 和fileTime()。

[since 6.6] QDateTime QFileInfo::birthTime(const QTimeZone &tz) const

返回文件的创建(生成)日期和时间。

返回的时间采用由tz 指定的时区。例如,您可以使用QTimeZone::LocalTime 或QTimeZone::UTC 分别获取本地时区或UTC时间。由于原生文件系统API通常使用UTC,因此使用QTimeZone::UTC 通常速度更快,因为它无需进行任何转换。

如果文件的创建时间不可用,该函数将返回一个无效的QDateTime 。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

该函数在 Qt 6.6 中引入。

另请参阅 lastModified(const QTimeZone &)、lastRead(const QTimeZone &)、metadataChangeTime(const QTimeZone &) 以及fileTime(QFileDevice::FileTime, const QTimeZone &)。

QString QFileInfo::bundleName() const

返回包的名称。

在 macOS 和 iOS 上,如果路径为 `isBundle()`,则返回该软件包的正确本地化名称。在所有其他平台上,将返回空字符串 `QString `。

示例:

QFileInfo fi("/Applications/Safari.app");
QString bundle = fi.bundleName();                // name = "Safari"

另请参阅 isBundle()、filePath()、baseName() 和suffix()。

bool QFileInfo::caching() const

如果启用了缓存,则返回true ;否则返回false 。

另请参阅 setCaching() 和refresh()。

QString QFileInfo::canonicalFilePath() const

返回文件系统条目的规范路径,其中包括该条目的名称,即不包含符号链接或冗余的'.' 或'..' 元素的绝对路径。

如果条目不存在、无法访问(例如,当前用户无权访问该目录路径),或者在将路径规范化时发生错误(通常是由于悬空符号链接导致),则该方法返回空字符串。

另请参阅 filePath()、absoluteFilePath() 和dir()。

QString QFileInfo::canonicalPath() const

返回文件系统条目的规范路径(不包括条目名称),即不包含符号链接或冗余的“.”或“..”元素的绝对路径。

如果条目不存在、无法访问(例如,当前用户无权访问某个目录路径),或者在规范化路径时发生错误(通常是由于悬空符号链接),则该方法返回空字符串。

另请参阅 path() 和absolutePath()。

QString QFileInfo::completeBaseName() const

返回不包含路径的完整文件基名。

完整的文件基名由文件中的所有字符组成,直至最后一个“.”字符(但不包括该字符)。

示例:

QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.completeBaseName();  // base = "archive.tar"

另请参阅 fileName()、suffix()、completeSuffix() 以及baseName()。

QString QFileInfo::completeSuffix() const

返回文件的完整后缀(扩展名)。

完整的后缀由文件中第一个“.”之后(但不包括该“.”)的所有字符组成。

示例:

QFileInfo fi("/tmp/archive.tar.gz");
QString ext = fi.completeSuffix();  // ext = "tar.gz"

另请参阅 fileName()、suffix()、baseName() 和completeBaseName()。

QDir QFileInfo::dir() const

返回一个QDir 对象,该对象表示此QFileInfo 所引用的文件系统条目父目录的路径。

注意:返回的 QDir 始终对应于该对象的父目录,即使该QFileInfo 表示的是一个目录。

对于以下每种情况,dir() 都会返回QDir "~/examples/191697" 。

    QFileInfo fileInfo1("~/examples/191697/.");
    QFileInfo fileInfo2("~/examples/191697/..");
    QFileInfo fileInfo3("~/examples/191697/main.cpp");

对于以下每种情况,dir() 返回QDir "." 。

    QFileInfo fileInfo4(".");
    QFileInfo fileInfo5("..");
    QFileInfo fileInfo6("main.cpp");

另请参阅 absolutePath()、filePath()、fileName()、isRelative() 和absoluteDir()。

bool QFileInfo::exists() const

如果文件系统条目(QFileInfo )所指向的文件存在,则返回true ;否则返回false 。

注意:如果 该条目是一个指向不存在目标的符号链接,则该方法返回false 。

[static] bool QFileInfo::exists(const QString &path)

如果文件系统条目path 存在,则返回true ;否则返回false 。

注意:如果 `path ` 是一个指向不存在目标的符号链接,则该方法返回 `false`。

注意:使用 此函数进行文件系统访问比使用QFileInfo(path).exists() 更快。

QString QFileInfo::fileName() const

返回该QFileInfo 所引用的文件系统条目的名称,不包括路径。

示例:

QFileInfo fi("/tmp/archive.tar.gz");
QString name = fi.fileName();                // name = "archive.tar.gz"

注意:如果 该QFileInfo 指定的路径以目录分隔符'/' 结尾,则该条目的名称部分将被视为空。

另请参阅 isRelative()、filePath()、baseName() 和suffix()。

QString QFileInfo::filePath() const

返回该QFileInfo 所引用的文件系统条目的路径;该路径可以是绝对路径,也可以是相对路径。

另请参阅 absoluteFilePath()、canonicalFilePath() 和isRelative()。

QDateTime QFileInfo::fileTime(QFileDevice::FileTime time) const

返回由time 指定的文件时间。

如果无法确定该时间,则返回一个无效的日期时间。

如果文件是一个符号链接,则该函数返回目标的相关信息,而不是符号链接本身的信息。

此函数重载了QFileInfo::fileTime (QFileDevice::FileTime, const QTimeZone &),并返回与fileTime(time, QTimeZone::LocalTime) 相同的结果。

另请参阅 birthTime()、lastModified()、lastRead() 和metadataChangeTime()。

[since 6.6] QDateTime QFileInfo::fileTime(QFileDevice::FileTime time, const QTimeZone &tz) const

返回由 `time` 指定的文件时间。

返回的时间采用tz 指定的时区格式。例如,您可以使用QTimeZone::LocalTime 或QTimeZone::UTC 分别获取本地时区或UTC时间。由于原生文件系统API通常使用UTC,因此使用QTimeZone::UTC 通常速度更快,因为它无需进行任何转换。

如果无法确定时间,则返回一个无效的日期时间。

如果文件是符号链接,则该函数返回目标的相关信息,而不是符号链接本身的信息。

该函数在 Qt 6.6 中引入。

另请参阅 birthTime(const QTimeZone &)、lastModified(const QTimeZone &)、lastRead(const QTimeZone &)、metadataChangeTime(const QTimeZone &) 以及QDateTime::isValid()。

[since 6.0] std::filesystem::path QFileInfo::filesystemAbsoluteFilePath() const

返回absoluteFilePath(),类型为std::filesystem::path 。

该函数在 Qt 6.0 中引入。

另请参阅 absoluteFilePath()。

[since 6.0] std::filesystem::path QFileInfo::filesystemAbsolutePath() const

返回absolutePath(),类型为std::filesystem::path 。

该函数在 Qt 6.0 中引入。

另请参阅 absolutePath()。

[since 6.0] std::filesystem::path QFileInfo::filesystemCanonicalFilePath() const

返回canonicalFilePath(),类型为std::filesystem::path 。

该函数在 Qt 6.0 中引入。

另请参阅 canonicalFilePath()。

[since 6.0] std::filesystem::path QFileInfo::filesystemCanonicalPath() const

返回canonicalPath(),类型为std::filesystem::path 。

该函数在 Qt 6.0 中引入。

另请参阅 canonicalPath()。

[since 6.0] std::filesystem::path QFileInfo::filesystemFilePath() const

返回filePath(),其类型为std::filesystem::path 。

该函数在 Qt 6.0 中引入。

另请参阅 filePath()。

[since 6.2] std::filesystem::path QFileInfo::filesystemJunctionTarget() const

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

该函数在 Qt 6.2 中引入。

另请参阅 junctionTarget()。

[since 6.0] std::filesystem::path QFileInfo::filesystemPath() const

返回path(),类型为std::filesystem::path 。

该函数在 Qt 6.0 中引入。

另请参阅 path()。

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

该函数自 Qt 6.6 起引入。

另请参阅 readSymLink()。

[since 6.0] std::filesystem::path QFileInfo::filesystemSymLinkTarget() const

返回symLinkTarget(),类型为std::filesystem::path 。

该函数在 Qt 6.0 中引入。

另请参阅 symLinkTarget()。

QString QFileInfo::group() const

返回文件的组。在 Windows 系统上、在文件没有组的系统上,或者发生错误时,将返回一个空字符串。

在 Unix 系统下,此函数可能需要较长时间(大约数毫秒)。

如果文件是符号链接,该函数将返回目标文件的信息,而非符号链接本身的信息。

另请参阅 groupId()、owner() 和ownerId()。

uint QFileInfo::groupId() const

返回文件所属组的 ID。

在 Windows 以及文件不具有组属性的系统上,此函数始终返回 (uint) -2。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身。

另请参阅 group()、owner() 和ownerId()。

bool QFileInfo::isAbsolute() const

如果文件系统条目的路径是绝对路径,则返回true ;否则返回false (即路径是相对路径)。

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

另请参阅 isRelative()。

[since 6.4] bool QFileInfo::isAlias() const

如果该对象指向一个别名,则返回true ;否则返回false 。

别名仅存在于 macOS 系统中。它们被视为普通文件,因此打开别名将直接打开该文件本身。若要打开别名所引用的文件或目录,请使用symLinkTarget()。

注意:即使 别名指向一个不存在的文件,isAlias() 也会返回 true。

该函数在 Qt 6.4 中引入。

另请参阅 isFile()、isDir()、isSymLink() 以及symLinkTarget()。

bool QFileInfo::isBundle() const

如果该对象在 macOS 和 iOS 上指向一个软件包或指向软件包的符号链接,则返回 `true `;否则返回 `false`。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

另请参阅 isDir()、isSymLink() 和isFile()。

bool QFileInfo::isDir() const

如果该对象指向一个目录或指向目录的符号链接,则返回true 。如果该对象指向的不是目录(例如文件)或该对象不存在,则返回false 。

如果该文件是符号链接,则此函数返回目标的信息,而非符号链接本身的信息。

另请参阅 isFile()、isSymLink() 和isBundle()。

bool QFileInfo::isExecutable() const

如果文件系统条目(QFileInfo )所指向的文件可执行,则返回true ;否则返回false 。

如果该文件是符号链接,则此函数返回目标文件的信息,而非符号链接本身的信息。

另请参阅 isReadable()、isWritable() 和permission()。

bool QFileInfo::isFile() const

如果该对象指向一个文件或指向文件的符号链接,则返回true 。如果该对象指向的不是文件(例如目录)或该对象不存在,则返回false 。

如果文件是符号链接,则该函数返回目标的相关信息,而非符号链接本身的信息。

另请参阅 isDir()、isSymLink() 和isBundle()。

bool QFileInfo::isHidden() const

如果文件系统条目(QFileInfo )所指向的文件为“隐藏”文件,则返回true ;否则返回false 。

注意:在 Unix 系统中,即使QDir::entryList 将特殊条目 "." 和 ".." 视为可见,该函数仍会返回true 。另请注意,由于该函数会检查文件名,因此在 Unix 系统中,如果该文件是符号链接,它将检查符号链接本身的名称,而非目标文件的名称。

在 Windows 系统上,如果目标文件(而非符号链接本身)是隐藏文件,则该函数返回true 。

bool QFileInfo::isJunction() const

如果对象指向一个连接点,则返回true ;否则返回false 。

连接点仅存在于 Windows 的 NTFS 文件系统中,通常由mklink 命令创建。它们可以被视为目录的符号链接,且只能针对本地卷上的绝对路径创建。

bool QFileInfo::isNativePath() const

如果文件路径可直接用于原生 API,则返回 `true `。如果文件由 Qt 内部的虚拟文件系统(如Qt 资源系统)支持,则返回 `false `。

注意:根据平台和原生 API 的输入要求,原生路径可能仍需要进行路径分隔符和字符编码的转换。

另请参阅 QDir::toNativeSeparators()、QFile::encodeName()、filePath()、absoluteFilePath() 以及canonicalFilePath()。

[since 6.10] bool QFileInfo::isOther() const

如果该QFileInfo 指向的文件系统条目既不是目录、普通文件,也不是符号链接,则返回true 。否则返回false 。

如果该QFileInfo 指向一个不存在的条目,则此方法返回false 。

false如果该条目是一个悬空符号链接(目标不存在),则该方法返回 。对于非悬空符号链接,该函数返回的是目标的相关信息,而非符号链接本身。

在 Unix 中,特殊(其他)文件系统条目包括 FIFO、套接字、字符设备或块设备。更多详细信息,请参阅 mknod 手册页。

在 Windows 系统上(出于历史原因,参见Symbolic Links and Shortcuts ),对于 `.lnk ` 文件,该方法返回 `true `。

该函数在 Qt 6.10 中引入。

另请参阅 isDir()、isFile()、isSymLink() 以及QDirListing::IteratorFlag::ExcludeOther 。

bool QFileInfo::isReadable() const

如果用户可以读取该文件系统条目(由 `QFileInfo ` 所指代),则返回 `true `;否则返回 `false`。

如果该文件是符号链接,则该函数返回目标文件的信息,而不是符号链接本身的信息。

注意:如果 未启用NTFS permissions 检查,则在 Windows 上的结果仅反映该条目是否存在。

另请参阅 isWritable()、isExecutable() 和permission()。

bool QFileInfo::isRelative() const

如果文件系统条目的路径是相对路径,则返回true ;否则返回false (即路径为绝对路径)。

在 Unix 系统中,绝对路径以目录分隔符'/' 开头。在 Windows 系统中,绝对路径以驱动器标识符开头(例如,D:/ )。

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

另请参阅 isAbsolute()。

bool QFileInfo::isRoot() const

如果该对象指向一个目录或指向目录的符号链接,且该目录是根目录,则返回true ;否则返回false 。

bool QFileInfo::isShortcut() const

如果该对象指向一个快捷方式,则返回true ;否则返回false 。

快捷方式仅存在于 Windows 系统中,通常是.lnk 文件。例如,对于 Windows 上的快捷方式(*.lnk 文件),将返回 true;但在 Unix 系统(包括 macOS 和 iOS)上,将返回 false。

快捷方式(.lnk)文件被视为普通文件。打开这些文件将直接打开其对应的.lnk 文件本身。若要打开快捷方式所引用的文件,必须对快捷方式调用symLinkTarget()方法。

注意:即使 快捷方式(损坏的快捷方式)指向一个不存在的文件,isShortcut() 仍会返回 true。

另请参阅 isFile()、isDir()、isSymbolicLink() 和symLinkTarget()。

如果该对象指向符号链接、快捷方式或别名,则返回true ;否则返回false 。

符号链接存在于 Unix(包括 macOS 和 iOS)以及 Windows 系统中,通常分别由ln -s 或mklink 命令创建。打开一个符号链接实际上就是打开link's target 。

此外,对于 Windows 上的快捷方式(*.lnk 文件)和 macOS 上的别名,该函数将返回 true。此行为已被弃用,并在 Qt 的未来版本中可能会发生变化。打开快捷方式或别名将打开.lnk 或别名文件本身。

示例:

QFileInfo info(fileName);
if (info.isSymLink())
    fileName = info.symLinkTarget();

注意: 如果符号链接指向现有目标, exists() 将返回true ;否则将返回false 。

另请参阅 isFile()、isDir() 和symLinkTarget()。

如果该对象指向符号链接,则返回true ;否则返回false 。

符号链接存在于 Unix(包括 macOS 和 iOS)以及 Windows(NTFS 符号链接)中,通常分别由ln -s 或mklink 命令创建。

Unix 系统对符号链接的处理是透明的。打开一个符号链接实际上就是打开link's target 。

与 `isSymLink()` 不同,对于 Windows 上的快捷方式(`*.lnk ` 文件)和 macOS 上的别名,该函数将返回 `false`。请改用 `QFileInfo::isShortcut()` 和 `QFileInfo::isAlias()`。

注意: 如果符号链接指向已存在的目标,exists() 将返回true ;否则将返回false 。

另请参阅 isFile()、isDir()、isShortcut() 和symLinkTarget()。

bool QFileInfo::isWritable() const

如果用户可以向该文件系统条目写入数据(该条目由QFileInfo 所指代),则返回true ;否则返回false 。

如果该文件是一个符号链接,则此函数返回目标文件的信息,而不是符号链接本身的信息。

注意:如果 未启用NTFS permissions 检查,则在 Windows 上的结果仅反映该条目是否被标记为只读。

另请参阅 isReadable()、isExecutable() 和permission()。

[since 6.2] QString QFileInfo::junctionTarget() const

将 NTFS 连接解析为其引用的路径。

返回 NTFS 连接点所指向的目录的绝对路径;如果该对象不是 NTFS 连接点,则返回空字符串。

无法保证 NTFS 连接所指的目录确实存在。

此函数在 Qt 6.2 中引入。

另请参阅 isJunction()、isFile()、isDir()、isSymLink()、isSymbolicLink() 和isShortcut()。

QDateTime QFileInfo::lastModified() const

返回文件最后修改的日期和时间。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

该函数重载了QFileInfo::lastModified(const QTimeZone &),其返回值与lastModified(QTimeZone::LocalTime) 相同。

另请参阅 birthTime()、lastRead()、metadataChangeTime() 和fileTime()。

[since 6.6] QDateTime QFileInfo::lastModified(const QTimeZone &tz) const

返回文件最后修改的日期和时间。

返回的时间采用由tz 指定的时区。例如,您可以使用QTimeZone::LocalTime 或QTimeZone::UTC 分别获取本地时区或UTC时间。由于原生文件系统API通常使用UTC,因此使用QTimeZone::UTC 通常速度更快,因为它无需进行任何转换。

如果文件是符号链接,则该函数返回目标的信息,而非符号链接本身的信息。

该函数于 Qt 6.6 中引入。

另请参阅 birthTime(const QTimeZone &)、lastRead(const QTimeZone &)、metadataChangeTime(const QTimeZone &) 以及fileTime(QFileDevice::FileTime, const QTimeZone &)。

QDateTime QFileInfo::lastRead() const

返回文件最后一次被读取(访问)的日期和时间。

在无法获取此信息的平台上,返回的时间与lastModified()相同。

如果文件是符号链接,则该函数返回目标文件的信息,而不是符号链接本身的信息。

此函数重载了QFileInfo::lastRead(const QTimeZone &),并返回与lastRead(QTimeZone::LocalTime) 相同的结果。

另请参阅 birthTime()、lastModified()、metadataChangeTime() 以及fileTime()。

[since 6.6] QDateTime QFileInfo::lastRead(const QTimeZone &tz) const

返回文件上次被读取(访问)的日期和时间。

返回的时间采用由 `tz` 指定的时区。例如,您可以使用 `QTimeZone::LocalTime ` 或 `QTimeZone::UTC ` 分别获取本地时区或 UTC 时区下的时间。由于原生文件系统 API 通常使用 UTC,因此使用 `QTimeZone::UTC ` 通常速度更快,因为它无需进行任何转换。

在无法获取此信息的平台上,该函数返回的时间与lastModified() 相同。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

该函数于 Qt 6.6 中引入。

另请参阅 birthTime(const QTimeZone &)、lastModified(const QTimeZone &)、metadataChangeTime(const QTimeZone &) 以及fileTime(QFileDevice::FileTime, const QTimeZone &)。

bool QFileInfo::makeAbsolute()

如果文件系统条目的路径是相对路径,则该方法会将其转换为绝对路径并返回true ;如果路径已经是绝对路径,则该方法返回false 。

另请参阅 filePath() 和isRelative()。

QDateTime QFileInfo::metadataChangeTime() const

返回文件元数据最后一次更改的日期和时间(以本地时间表示)。

元数据的更改发生在文件首次创建时,但也发生在用户写入或设置 inode 信息时(例如,更改文件权限)。

如果文件是一个符号链接,则该函数返回目标文件的信息,而不是符号链接本身的信息。

此函数重载了 QFileInfo::metadataChangeTime(constQTimeZone &tz),其返回值与metadataChangeTime(QTimeZone::LocalTime) 相同。

另请参阅 birthTime()、lastModified()、lastRead() 以及fileTime()。

[since 6.6] QDateTime QFileInfo::metadataChangeTime(const QTimeZone &tz) const

返回文件元数据最后一次被修改的日期和时间。元数据的修改不仅发生在文件首次创建时,还发生在用户写入或设置 inode 信息时(例如,更改文件权限)。

返回的时间采用由tz 指定的时区。例如,您可以使用QTimeZone::LocalTime 或QTimeZone::UTC 分别获取本地时区或UTC时间。由于原生文件系统API通常使用UTC,因此使用QTimeZone::UTC 通常更快,因为它无需进行任何转换。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

该函数在 Qt 6.6 中引入。

另请参阅 birthTime(const QTimeZone &)、lastModified(const QTimeZone &)、lastRead(const QTimeZone &) 以及fileTime(QFileDevice::FileTime time, const QTimeZone &)。

QString QFileInfo::owner() const

返回文件的所有者。在文件没有所有者的系统上,或者发生错误时,将返回一个空字符串。

在 Unix 系统上,此函数可能需要较长时间(约几毫秒)。在 Windows 系统上,除非已启用“NTFS permissions ”检查,否则该函数将返回空字符串。

如果文件是符号链接,该函数将返回目标文件的信息,而非符号链接本身的信息。

另请参阅 ownerId()、group() 和groupId()。

uint QFileInfo::ownerId() const

返回文件所有者的 ID。

在 Windows 以及文件没有所有者的系统上,该函数返回 ((uint) -2)。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

另请参阅 owner()、group() 和groupId()。

QString QFileInfo::path() const

返回该QFileInfo 所引用的文件系统条目的路径,不包括该条目的名称。

注意:如果 此QFileInfo 提供的路径以目录分隔符'/' 结尾,则该条目的名称部分将被视为空。在这种情况下,本函数将返回完整的路径。

另请参阅 filePath()、absolutePath()、canonicalPath()、dir()、fileName() 以及isRelative()。

bool QFileInfo::permission(QFileDevice::Permissions permissions) const

用于检测文件权限。permissions 参数可以由多个QFile::Permissions类型的标志通过按“或”运算组合而成,以检查各种权限组合。

在文件不具备权限的系统上,该函数始终返回true 。

注意: 如果在 Windows 上未启用NTFS permissions 检查,结果 可能不准确。

示例:

QFileInfo fi("/tmp/archive.tar.gz");
if(fi.permission(QFile::WriteUser|QFile::ReadGroup))
    qWarning("I can change the file; my group can read the file");
if(fi.permission(QFile::WriteGroup|QFile::WriteOther))
    qWarning("The group or others can change the file");

如果该文件是一个符号链接,则该函数返回目标文件的信息,而不是符号链接本身的信息。

另请参阅 isReadable()、isWritable() 和isExecutable()。

QFileDevice::Permissions QFileInfo::permissions() const

返回该文件的完整 QFile::Permissions 组合(采用“或”运算)。

注意: 如果在 Windows 系统上未启用“NTFS permissions ”检查,结果 可能会不准确。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

读取符号链接所引用的路径。

返回符号链接所指向的原始路径,不会将相对于包含该符号链接的目录的相对路径进行解析。只有当符号链接实际指向绝对路径时,返回的字符串才会是绝对路径。如果对象不是符号链接,则返回空字符串。

该函数在 Qt 6.6 中引入。

另请参阅 symLinkTarget()、exists()、isSymLink()、isDir() 以及isFile()。

void QFileInfo::refresh()

刷新此QFileInfo 所引用的文件系统条目信息,即在下一次获取缓存属性时,从文件系统中读取相关信息。

void QFileInfo::setCaching(bool enable)

如果enable 为true,则启用文件信息的缓存。如果enable 为false,则禁用缓存。

当启用缓存时,QFileInfo 会在首次需要时从文件系统读取文件信息,但通常之后不会再读取。

默认情况下,缓存功能处于启用状态。

另请参阅 refresh() 和caching()。

void QFileInfo::setFile(const QString &path)

将此QFileInfo 所提供信息的文件系统条目路径设置为path ,该路径可以是绝对路径或相对路径。

在 Unix 系统中,绝对路径以目录分隔符'/' 开头。在 Windows 系统中,绝对路径以驱动器标识开头(例如D:/ )。

相对路径以目录名或普通文件名开头,并指定相对于当前工作目录的文件系统条目路径。

示例:

QFileInfo info("/usr/bin/env");

QString path = info.absolutePath(); // path = /usr/bin
QString base = info.baseName(); // base = env

info.setFile("/etc/hosts");

path = info.absolutePath(); // path = /etc
base = info.baseName(); // base = hosts

另请参阅 isFile()、isRelative()、QDir::setCurrent() 和QDir::isRelativePath()。

[since 6.0] void QFileInfo::setFile(const std::filesystem::path &path)

将此QFileInfo 所提供信息的文件系统条目路径设置为path 。

如果path 是相对路径,则QFileInfo 也将采用相对路径。

该函数在 Qt 6.0 中引入。

void QFileInfo::setFile(const QFileDevice &file)

将QFileInfo 所提供信息的文件设置为file 。

如果 `file ` 包含相对路径,则 `QFileInfo ` 也将具有相对路径。

这是一个重载函数。

另请参阅 isRelative()。

void QFileInfo::setFile(const QDir &dir, const QString &path)

将此QFileInfo 所提供信息的文件系统条目路径设置为目录dir 下的path 。

如果dir 具有相对路径,则QFileInfo 也将具有相对路径。

如果path 是绝对路径,则dir 指定的目录将被忽略。

这是一个重载函数。

另请参阅 isRelative()。

qint64 QFileInfo::size() const

返回文件大小(以字节为单位)。如果文件不存在或无法获取,则返回 0。

如果文件是符号链接,则该函数返回目标文件的信息,而非符号链接本身的信息。

另请参阅 exists()。

[since 6.0] void QFileInfo::stat()

从文件系统读取所有属性。

当在工作线程中收集文件系统信息,然后以缓存的QFileInfo 实例的形式将其传递给用户界面时,此功能非常有用。

该函数在 Qt 6.0 中引入。

另请参阅 setCaching() 和refresh()。

QString QFileInfo::suffix() const

返回文件的后缀(扩展名)。

后缀由文件中最后一个“.”之后(但不包括该“.”)的所有字符组成。

示例:

QFileInfo fi("/tmp/archive.tar.gz");
QString ext = fi.suffix();  // ext = "gz"

文件的后缀在所有平台上的计算方式均相同,与文件命名约定无关(例如,Unix 系统中的 ".bashrc" 文件其基础名称为空,后缀为 "bashrc")。

另请参阅 fileName()、completeSuffix()、baseName() 以及completeBaseName()。

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

将此文件的信息与other 互换。此操作速度非常快,且从未失败。

QString QFileInfo::symLinkTarget() const

返回符号链接所指向的文件或目录的绝对路径;如果该对象不是符号链接,则返回空字符串。

该名称可能并不代表一个现有的文件;它仅是一个字符串。

注意: 如果符号链接指向一个现有的目标,则 exists()返回true ;否则返回false 。

另请参阅 exists()、isSymLink()、isDir() 和isFile()。

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

将other 通过移动赋值操作赋值给此QFileInfo 实例。

注意: 被移动的对象 other 将处于一种部分构建状态,在此状态下,唯一有效的操作是销毁和赋值。

QFileInfo &QFileInfo::operator=(const QFileInfo &fileinfo)

复制给定的fileinfo ,并将副本赋值给此QFileInfo 。

相关非成员

QFileInfoList

QList<QFileInfo> 的同义词。

[noexcept] bool operator!=(const QFileInfo &lhs, const QFileInfo &rhs)

如果QFileInfo lhs 所指的文件系统条目与rhs 所指的不同,则返回true ;否则返回false 。

另请参阅 operator==()。

[noexcept] bool operator==(const QFileInfo &lhs, const QFileInfo &rhs)

如果QFileInfo lhs 和QFileInfo rhs 指向文件系统上的同一条条目,则返回true ;否则返回false 。

请注意,比较两个空的QFileInfo 对象(不包含任何文件系统条目引用,即路径不存在或为空)的结果未定义。

警告:这 不会比较两个指向同一目标的不同符号链接。

警告:在 Windows上 ,指向同一文件系统条目的长路径和短路径会被视为指向不同的条目。

另请参阅 operator!=()。

宏文档

[since 6.0] QT_IMPLICIT_QFILEINFO_CONSTRUCTION

定义此宏会使大多数QFileInfo 构造函数从显式变为隐式。由于QFileInfo 对象的构造成本较高,应避免无意中创建它们,尤其是在存在成本更低的替代方案时。例如:

QDirIterator it(dir);
while (it.hasNext()) {
    // Implicit conversion from QString (returned by it.next()):
    // may create unnecessary data structures and cause additional
    // accesses to the file system. Unless this macro is defined,
    // this line does not compile.

    QFileInfo fi = it.next();

    ~~~
}

相反,应使用正确的 API:

QDirIterator it(dir);
while (it.hasNext()) {
    // Extract the QFileInfo from the iterator directly:
    QFileInfo fi = it.nextFileInfo();

    ~~~
}

通过直接初始化(而非复制初始化)始终可以构建QString 、QFile 等对象:

QFileInfo fi1 = some_string; // Does not compile unless this macro is defined
QFileInfo fi2(some_string);  // OK
QFileInfo fi3{some_string};  // Possibly better, avoids the risk of the Most Vexing Parse
auto fi4 = QFileInfo(some_string); // OK

此宏是出于兼容性考虑而提供的。不建议在新代码中使用它。

该宏在 Qt 6.0 中引入。

© 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.