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(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)
~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
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() 函数提供了 symlink 指向的目标的绝对路径。

文件系统条目的路径元素可以用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 XML 的未来版本中删除,之后.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 时会受到一些限制:

另请参阅 QDirQFile

成员函数文档

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 的副本。

[noexcept] QFileInfo::~QFileInfo()

摧毁QFileInfo 并释放其资源。

QDir QFileInfo::absoluteDir() const

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

// 当前工作目录为"/home/user/Documents/memos/"QFileInfoinfo1(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"

// 目录上的 QFileInfoQFileInfoinfo2(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

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

除非isRelative() 为真,否则该函数的返回值与filePath() 相同。与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::LocalTimeQTimeZone::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(),则返回 bundle 的正确本地化名称。在所有其他平台上,将返回空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

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

如果条目不存在,canonicalFilePath() 将返回空字符串。

另请参阅 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::LocalTimeQTimeZone::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

std::filesystem::path 的形式返回absoluteFilePath() 。

此函数在 Qt 6.0 中引入。

另请参阅 absoluteFilePath() 。

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

std::filesystem::path 的形式返回absolutePath() 。

此函数在 Qt 6.0 中引入。

另请参阅 absolutePath() 。

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

std::filesystem::path 的形式返回canonicalFilePath() 。

此函数在 Qt 6.0 中引入。

另请参阅 canonicalFilePath() 。

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

std::filesystem::path 的形式返回canonicalPath() 。

此函数在 Qt 6.0 中引入。

另请参阅 canonicalPath() 。

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

std::filesystem::path 的形式返回filePath() 。

此函数在 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

std::filesystem::path 的形式返回path() 。

此函数在 Qt 6.0 中引入。

另请参阅 path() 。

std::filesystem::path 的形式返回readSymLink() 。

此函数在 Qt 6.6 中引入。

另请参阅 readSymLink() 。

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

std::filesystem::path 的形式返回symLinkTarget() 。

此函数在 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 上,如果此对象指向一个 bundle 或指向 bundle 的符号链接,则返回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 Resource System)支持,则返回false

注:本地路径可能仍需要转换路径分隔符和字符编码,具体取决于平台和本地 API 的输入要求。

另请参阅 QDir::toNativeSeparators(),QFile::encodeName(),filePath(),absoluteFilePath() 和canonicalFilePath().

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 -smklink 命令创建。打开符号链接可有效打开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-symlink)中,通常分别由ln -smklink 命令创建。

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::LocalTimeQTimeZone::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::LocalTimeQTimeZone::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::LocalTimeQTimeZone::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 类型的标志,也可以是多个 QFile::Permissions 类型的标志。

在文件没有权限的系统中,该函数总是返回true

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

示例

QFileInfofi("/tmp/archive.tar.gz");if(fi.permission(QFile::WriteUser| ::ReadGroup) 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 的完整 OR-ed 组合。

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

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

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

返回符号链接引用的原始路径,不解析相对于包含符号链接目录的相对路径。只有当符号链接实际引用绝对路径时,返回的字符串才是绝对路径。如果对象不是符号链接,则返回空字符串。

此函数在 Qt 6.6 中引入。

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

void QFileInfo::refresh()

刷新QFileInfo 所指向的文件系统条目的信息,即在下一次获取缓存属性时从文件系统读取信息。

void QFileInfo::setCaching(bool enable)

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

启用缓存后,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)

Move-assignsother 到此QFileInfo 实例。

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 lhsQFileInfo 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();

    ~~~
}

通过使用直接初始化而不是复制初始化,总是可以从QStringQFile 等构建对象:

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 中引入。

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