QFileInfo类提供与系统无关的文件信息。
| Header: | #include < QFileInfo > |
|---|---|
| qmake: | QT += core |
| Inherits: | |
| Inherited By: |
QFileInfo提供有关文件在文件系统中的名称和位置(路径),其访问权限以及它是目录链接还是符号链接等信息。文件的大小和上次修改/读取时间也可用。 QFileInfo也可以用于获取有关Qt资源的信息。
QFileInfo可以指向具有相对或绝对文件路径的文件。绝对文件路径以目录分隔符“ /”(或者Windows上的驱动器规范)开头。相对文件名以目录名或文件名开头,并指定相对于当前工作目录的路径。绝对路径的一个示例是字符串“ / tmp / quartz”。相对路径可能类似于“ src / fatlib”。您可以使用函数isRelative() 来检查QFileInfo是使用相对还是绝对文件路径。您可以调用函数makeAbsolute() 将相对QFileInfo的路径转换为绝对路径。
QFileInfo处理的文件是在构造函数中设置的,或以后使用setFile() 设置。使用exist() 来查看文件是否存在,并使用size() 来获取其大小。
文件的类型是通过isFile() ,isDir() 和isSymLink() 获得的。 symLinkTarget() 函数提供symlink指向的文件的名称。
在Unix(包括macOS和iOS)上,此类中的属性getter函数返回目标文件的时间和大小等属性,而不是符号链接的属性,因为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:\\Documents and Settings\\Bob\\untabify.lnk");
info1.isSymLink(); // returns true
info1.absoluteFilePath(); // returns "C:/Documents and Settings/Bob/untabify.lnk"
info1.size(); // returns 743
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
可以使用path() 和fileName() 提取文件名的元素。 可以使用baseName() ,suffix() 或completeSuffix() 提取fileName() 的部分。 由Qt类创建的目录的QFileInfo对象将没有尾随文件分隔符。 如果希望在自己的文件信息对象中使用尾随分隔符,只需在给构造函数或setFile() 的文件名后附加一个。
文件的日期由birthTime() ,lastModified() ,lastRead() 和fileTime() 返回。 有关文件访问权限的信息是通过isReadable() ,isWritable() 和isExecutable() 获得的。 可通过owner() ,ownerId() ,group() 和groupId() 获得文件的所有权。 您可以使用Permission() 函数在单个语句中检查文件的权限和所有权。
注意:在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
QFileInfo的某些功能查询文件系统,但是出于性能原因,某些功能仅对文件名本身起作用。 例如:要返回相对文件名的绝对路径,absolutePath() 必须查询文件系统。 但是,path() 函数可以直接处理文件名,因此速度更快。
注意:为了提高性能,QFileInfo缓存有关文件的信息。
因为文件可以被其他用户或程序甚至同一程序的其他部分更改,所以有一个刷新文件信息的函数:refresh() 。 如果要关闭QFileInfo的缓存,并在每次您从QFileInfo请求信息时强制其访问文件系统,请调用QFileInfo的某些功能查询文件系统,但是出于性能原因,某些功能仅对文件名本身起作用。 例如:要返回相对文件名的绝对路径,absolutePath() 必须查询文件系统。 但是,path() 函数可以直接处理文件名,因此速度更快。
注意:为了提高性能,QFileInfo缓存有关文件的信息。
因为文件可以被其他用户或程序甚至同一程序的其他部分更改,所以有一个刷新文件信息的函数:refresh() 。 如果要关闭QFileInfo的缓存,并在每次您从QFileInfo请求信息时强制其访问文件系统,请调用setCaching(false)。
另请参见QDir和QFile。
bool exists(const QString &file)
typedef QFileInfoList 等同于 QList< QFileInfo>.