QFileInfo 类
QFileInfo 类提供了用于检索文件系统条目信息的操作系统无关的 API。更多信息...
头文件 | #include <QFileInfo> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
- 所有成员列表,包括继承成员
- QFileInfo 是 输入/输出和网络 以及 隐式共享类 的一部分。
注意: 本类中所有函数都是 可重入的。
公共函数
QFileInfo() | |
QFileInfo(const QString &path) | |
QFileInfo(const QFileDevice &file) | |
QFileInfo(const QDir &dir, const QString &path) | |
(自 6.0) | QFileInfo(const std::filesystem::path &file) |
(自 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 |
(自 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 |
(自 6.6) QDateTime | fileTime(QFileDevice::FileTime time, const QTimeZone &tz) const |
(自 6.0) std::filesystem::path | filesystemAbsoluteFilePath() const |
(自 6.0) std::filesystem::path | filesystemAbsolutePath() const |
(自 6.0) std::filesystem::path | filesystemCanonicalFilePath() const |
(自 6.0) std::filesystem::path | filesystemCanonicalPath() const |
(自 6.0) std::filesystem::path | filesystemFilePath() const |
(自 6.2) std::filesystem::path | filesystemJunctionTarget() const |
(自 6.0) std::filesystem::path | filesystemPath() const |
(since 6.6) std::filesystem::path | filesystemReadSymLink() const |
(自 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 |
(自 6.6) QDateTime | lastModified(const QTimeZone &tz) const |
QDateTime | lastRead() const |
(自 6.6) QDateTime | lastRead(const QTimeZone &tz) const |
bool | makeAbsolute() |
QDateTime | metadataChangeTime() const |
(自 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) |
void | setFile(const QFileDevice &file) |
void | setFile(const QDir &dir, const QString &path) |
(since 6.0) void | setFile(const std::filesystem::path &path) |
qint64 | size() const |
(since 6.0) void | stat() |
QString | suffix() const |
void | swap(QFileInfo &other) |
QString | symLinkTarget() const |
bool | operator!=(const QFileInfo &fileinfo) const |
QFileInfo & | operator=(const QFileInfo &fileinfo) |
QFileInfo & | operator=(QFileInfo &&other) |
bool | operator==(const QFileInfo &fileinfo) const |
静态公有成员
bool | exists(const QString &path) |
相关非成员
宏
详细描述
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(); // check status 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时有一些限制。
- 可能需要通过实现Android的本地文件选择器的QFileDialog来提示用户获取访问权限。
- 旨在遵循作用域存储指南,例如使用应用程序特定目录而不是其他公共外部目录。更多信息,请参阅存储最佳实践。
- 由于 Qt API 的设计(例如QFile),无法完全将后者 API 与 Android 的 MediaStore API 集成。
成员函数文档
QFileInfo::QFileInfo()
构建一个空的 QFileInfo 对象,它不引用任何文件系统条目。
另请参阅setFile。
[显式]
QFileInfo::QFileInfo(const QString &path)
构建一个 QFileInfo,它提供关于位于 path 的文件系统条目的信息,该路径可以是绝对路径或相对路径。
如果 path 是相对路径,则 QFileInfo 也将具有相对路径。
另请参阅setFile、isRelative、QDir::setCurrent 和 QDir::isRelativePath。
[显式]
QFileInfo::QFileInfo(const QFileDevice &file)
构建一个新 QFileInfo 对象,它提供关于文件 file 的信息。
如果该 file 有相对路径,则 QFileInfo 也将具有相对路径。
另请参阅isRelative。
[显式]
QFileInfo::QFileInfo(const QDir &dir, const QString &path)
构建一个新 QFileInfo 对象,它提供关于相对于目录 dir 的给定文件系统条目 path 的信息。
如果 dir 有相对路径,则 QFileInfo 也将具有相对路径。
如果 path 是绝对的,则将忽略由 dir 指定的目录。
另请参阅isRelative。
[自 6.0]
QFileInfo::QFileInfo(const std::filesystem::path &file)
构建一个新 QFileInfo 对象,它提供关于给定 file 的信息。
此功能是在 Qt 6.0 中引入的。
另请参阅setFile、isRelative、QDir::setCurrent 和 QDir::isRelativePath。
[自 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 的副本。
[不抛出异常]
QFileInfo::~QFileInfo()
销毁 QFileInfo 并释放其资源。
QDir QFileInfo::absoluteDir() const
返回一个 QDir 对象,表示指向此 QFileInfo 指向的文件系统条目的父目录的绝对路径。
// Given a current working directory of "/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" // A QFileInfo on a dir 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"); => fi.absoluteFilePath() => "C:/temp/foo"
此函数返回的与 filePath() 相同,除非 isRelative() 为真。与 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(const QTimeZone &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
返回文件系统条目的规范路径,包括条目的名称,即不包含符号链接或多余的“'.'”或“'..'”元素的超绝对路径。
如果条目不存在,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
返回一个表示指向该QFileInfo引用的文件系统条目的父目录路径的QDir对象。
对于以下每一项,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
。
[静态]
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。
[自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。
[自6.0起]
std::filesystem::path QFileInfo::filesystemAbsoluteFilePath() const
返回 absoluteFilePath() 作为 std::filesystem::path
。
此功能是在 Qt 6.0 中引入的。
参见 absoluteFilePath。
[自6.0起]
std::filesystem::path QFileInfo::filesystemAbsolutePath() const
返回 absolutePath() 作为 std::filesystem::path
。
此功能是在 Qt 6.0 中引入的。
参见 absolutePath。
[自6.0起]
std::filesystem::path QFileInfo::filesystemCanonicalFilePath() const
返回 canonicalFilePath() 作为 std::filesystem::path
。
此功能是在 Qt 6.0 中引入的。
[自6.0起]
std::filesystem::path QFileInfo::filesystemCanonicalPath() const
返回 canonicalPath() 作为 std::filesystem::path
。
此功能是在 Qt 6.0 中引入的。
参见 canonicalPath。
[自6.0起]
std::filesystem::path QFileInfo::filesystemFilePath() const
返回 filePath() 作为 std::filesystem::path
。
此功能是在 Qt 6.0 中引入的。
参见 filePath。
[自6.2起]
std::filesystem::path QFileInfo::filesystemJunctionTarget() const
返回 junctionTarget() 作为 std::filesystem::path
。
此函数自 Qt 6.2 引入。
参见 junctionTarget。
[自6.0起]
std::filesystem::path QFileInfo::filesystemPath() const
返回 path() 作为 std::filesystem::path
。
此功能是在 Qt 6.0 中引入的。
参见 path。
[自6.6起]
std::filesystem::path QFileInfo::filesystemReadSymLink() const
返回 readSymLink() 作为 std::filesystem::path
。
此函数在Qt 6.6中引入。
参见 readSymLink。
[自6.0起]
std::filesystem::path QFileInfo::filesystemSymLinkTarget() const
返回 a 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。
[自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 上,此函数在某些特殊条目“.”和“..”上返回 true
,即使在 QDir::entryList 中它们被对待的方式不同。此外,由于此函数检查文件名,因此如果此文件是符号链接,则它在 Unix 上检查符号链接的名称,而不是目标名称。
在 Windows 上,如果目标文件是隐藏的(不是符号链接),则此函数返回 true
。
bool QFileInfo::isJunction() const
如果对象指向一个 junction,则返回 true
;否则返回 false
。
Junctions 仅存在于 Windows 的 NTFS 文件系统中,通常由 mklink
命令创建。它们可以被视为目录的符号链接,并且只能为本地卷上的绝对路径创建。
bool QFileInfo::isNativePath() const
如果文件路径可以直接与本地 API 一起使用,则返回 true
。如果文件由 Qt 中的虚拟文件系统(如 Qt 资源系统)支持,则返回 false
。
注意:本地路径可能还需要根据平台和本地 API 的输入要求进行路径分隔符和字符编码的转换。
另请参阅QDir::toNativeSeparators(转换为本地分隔符),QFile::encodeName(编码名称),filePath(文件路径),absoluteFilePath(绝对文件路径)和 canonicalFilePath(规范文件路径)。
bool QFileInfo::isReadable() const
如果用户可以读取此 QFileInfo 指向的文件系统条目,则返回 true
;否则返回 false
。
如果是符号链接,此函数返回目标的信息,而不是符号链接本身。
注意:如果尚未启用 NTFS 权限 检查,则 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()。
bool QFileInfo::isSymLink() const
如果此对象指向符号链接、快捷方式或别名,则返回 true
;否则返回 false
。
符号链接存在于Unix(包括macOS和iOS)和Windows上,通常由 ln -s
或 mklink
命令创建。打开符号链接实际上打开链接的目标。
此外,在Windows上,快捷方式(*.lnk
文件)和macOS上的别名将返回 true。此行为已弃用,并可能在Qt的下一个版本中更改。打开快捷方式或别名将打开 .lnk
或别名文件本身。
示例
QFileInfo info(fileName); if (info.isSymLink()) fileName = info.symLinkTarget();
注意:exists() 如果符号链接指向现有目标,则返回 true
,否则返回 false
。
另请参阅:isFile(),isDir() 和 symLinkTarget()。
bool QFileInfo::isSymbolicLink() const
如果此对象指向符号链接,则返回 true
;否则返回 false
。
符号链接存在于Unix(包括macOS和iOS)和Windows(NTFS-symlink)上,通常由 ln -s
或 mklink
命令创建。
Unix会透明地处理符号链接。打开符号链接实际上打开链接的目标。
与 isSymLink 不同,Windows上的快捷方式(*.lnk
文件)和macOS上的别名将返回 false。请使用 QFileInfo::isShortcut() 和 QFileInfo::isAlias()。
注意:exists() 如果符号链接指向现有目标,则返回 true
,否则返回 false
。
另请参阅:isFile(),isDir(),isShortcut() 和 symLinkTarget()。
bool QFileInfo::isWritable() const
如果用户可以写入此 QFileInfo 所指的文件系统条目,则返回 true
;否则返回 false
。
如果是符号链接,此函数返回目标的信息,而不是符号链接本身。
注意:如果未启用 NTFS权限 检查,则在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(const QTimeZone &tz),并返回与 metadataChangeTime(QTimeZone::LocalTime)
相同的结果。
另请参阅 birthTime()、lastModified()、lastRead() 以及 fileTime()。
[since 6.6]
QDateTime QFileInfo::metadataChangeTime(const QTimeZone &
返回文件元数据最后更改的日期和时间。当文件首次创建时发生元数据更改,每次用户写入或设置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 权限 检查,否则将返回空字符串。
如果是符号链接,此函数返回目标的信息,而不是符号链接本身。
另请参阅 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
。
注意:如果未启用 NTFS 权限 检查,Windows 上的结果可能不准确。
示例
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 的完整按位或组合。
注意:如果未启用 NTFS 权限 检查,Windows 上的结果可能不准确。
如果是符号链接,此函数返回目标的信息,而不是符号链接本身。
[自6.6起]
QString QFileInfo::readSymLink() const
读取符号链接引用的路径。
返回符号链接引用的原始路径,不解析相对于符号链接目录的相对路径。返回的字符串将仅是绝对路径,如果符号链接实际上引用了这样的路径。如果没有对象是符号链接,则返回空字符串。
此函数在Qt 6.6中引入。
另请参阅symLinkTarget()[自6.0起]、exists()[自6.0起]、isSymLink()[自6.0起]、isDir()和isFile()[自6.0起]。
void QFileInfo::refresh()
刷新此QFileInfo所引用的文件系统条目的信息,即在下次获取缓存的属性时从文件系统中读取信息。
void QFileInfo::setCaching(bool enable)
如果enable为真,则启用文件信息的缓存。如果enable为假,则禁用缓存。
在启用了缓存时,当首次需要时,QFileInfo将从文件系统中读取文件信息,但通常不在以后的时间。
默认启用了缓存。
另请参阅refreshcaching()[自6.0起]。
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()[自6.0起]、isRelative()[自6.0起]、QDir::setCurrent()[自6.0起]和QDir::isRelativePath()[自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。
[自6.0起]
void QFileInfo::setFile(const std::filesystem::path &path)
将此QFileInfo提供信息的文件系统条目的路径设置为path。
如果path是相对的,则此QFileInfo也将是相对的。
此功能是在 Qt 6.0 中引入的。
qint64 QFileInfo::size() const
返回文件的字节数。如果文件不存在或无法获取,则返回 0。
如果是符号链接,此函数返回目标的信息,而不是符号链接本身。
另请参阅exists()。
[since 6.0]
void QFileInfo::stat()
从文件系统中读取所有属性。
这在收集关于文件系统的信息并将其以缓存 QFileInfo 实例的形式传递到 UI 的工作线程时非常有用。
此功能是在 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()。
bool QFileInfo::operator!=(const QFileInfo &fileinfo) const
如果此 QFileInfo 指向与 fileinfo 所指的文件系统条目不同的条目,则返回 true
;否则返回 false
。
另请参阅operator==()。
QFileInfo &QFileInfo::operator=(const QFileInfo &fileinfo)
将给定的fileinfo的副本复制到此 QFileInfo。
[noexcept]
QFileInfo &QFileInfo::operator=(QFileInfo &&other)
移动赋值other为此 QFileInfo 实例。
bool QFileInfo::operator==(const QFileInfo &fileinfo) const
如果此 QFileInfo 和 fileinfo 指向文件系统上的相同条目,则返回 true
;否则返回 false
。
请注意,比较两个空 QFileInfo 对象(不包含文件系统条目引用、不存在或为空的路径)的结果是未定义的。
警告:这将不会比较指向同一目标的两个不同的符号链接。
警告: 在 Windows 上,指代同一文件系统条目的长路径和短路径被视为不同条目。
另请参阅 运算符!=。
宏文档
[自 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 中引入的。
© 2024 Qt 公司有限公司。此处包含的文档贡献的版权归各自所有者所有。此处提供的文档在自由软件基金会的GNU 自由文档许可协议版本 1.3项下发布。Qt及其相应商标是芬兰和/或其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。