QFileInfo

QFileInfo是一个用于获取和操作文件系统中文件信息的类,提供了如文件路径、权限、类型、大小、访问时间等众多功能。它可以判断文件是否为绝对路径、可执行、隐藏、符号链接等,并提供了刷新、转换路径、获取所有者和组、文件大小等方法。此外,还支持缓存功能以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、描述

QFileInfo 提供有关文件系统中文件的名称和位置(路径)、访问权限、文件类型等信息。

FileInfo 还可用于获取有关 Qt 资源的信息。这个类是隐式共享的。

二、成员函数

2.1、判断函数

1、bool isAbsolute() 

文件路径是否绝对路径。

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

2、bool isBundle() 

对象是否指向一个包或指向 macOS 和 iOS 上的包的符号链接。

3、bool isDir() 

对象是否指向目录或指向目录的符号链接。

4、bool isExecutable() 

文件是否是可执行的。

如果文件是符号链接,并且目标是可执行的,则此函数返回 true。

5、bool isFile() 

对象是否指向文件或指向文件的符号链接。

如果文件是符号链接,并且目标是常规文件,则此函数返回 true。

6、bool isHidden() 

是否隐藏文件。

7、bool isJunction() 

对象是否指向一个连接点。

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

8、bool isNativePath() 

如果文件路径可以直接用于本机 API,则返回 true。 如果 Qt 内的虚拟文件系统(例如 Qt 资源系统)支持该文件,则返回 false。

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

9、bool isReadable() 

用户是否可以读取文件。

如果文件是符号链接,并且目标可读,则此函数返回 true。

注意:如果未启用 NTFS 权限检查,Windows 上的结果将仅反映文件是否存在。

10、bool isRelative() 

文件路径是否相对的。

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

11、bool isRoot() 

对象是否指向根目录或指向根目录的符号链接。

12、bool isShortcut() 

对象是否指向快捷方式。

快捷方式仅存在于 Windows 上,通常是 .lnk 文件。

快捷方式 (.lnk) 文件被视为常规文件。 打开这些将打开 .lnk 文件本身。 为了打开快捷方式引用的文件,必须在快捷方式上使用 symLinkTarget()。

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

13、bool isSymLink() 

对象是否指向符号链接或快捷方式。

14、bool isSymbolicLink() 

对象是否指向符号链接。

15、bool isWritable() 

用户是否可以写入文件。

如果文件是符号链接,并且目标是可写的,则此函数返回 true。

注意:如果未启用 NTFS 权限检查,Windows 上的结果将仅反映文件是否标记为只读。

2.2、其他函数

1、QFileInfo(const QDir &dir, const QString &file)

构造一个 QFileInfo,它提供有关给定file相对于目录 dir 的信息。

  • 如果 dir 是相对路径,则 QFileInfo 也将具有相对路径。
  • 如果 file 是绝对路径,则 dir 指定的目录将被忽略。

       QFileInfo(const QString &file)

构造一个 QFileInfo,提供有关给定文件的信息。该文件可以是绝对或相对路径。

2、QDir absoluteDir() 

以 QDir 对象的形式返回文件的绝对路径。 

3、QString absoluteFilePath() 

      std::filesystem::path filesystemAbsoluteFilePath()

返回包含文件名的绝对路径。绝对路径名由完整路径和文件名组成。

  • 在 Unix 上,这将始终以根目录“/”开头。
  • 在 Windows 上,这将始终以“D:/”开头,其中 D 是驱动器号,但未映射到驱动器号的网络共享除外(在这种情况下,路径将以“//sharename/”开头)。驱动器号将大写。

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

4、QString absolutePath() 

      std::filesystem::path filesystemAbsolutePath()

返回文件的路径绝对路径。 这不包括文件名。

  • 在 Unix 上,绝对路径将始终以根目录“/”开头。
  • 在 Windows 上,这将始终以“D:/”开头,其中 D 是驱动器号,但未映射到驱动器号的网络共享除外(在这种情况下,路径将以“//sharename/”开头)。

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

5、QString baseName() 

返回不带路径的文件的基本名称。

6、QDateTime birthTime() 

返回文件创建的日期和时间。如果文件是符号链接,则返回目标文件的时间。

7、QString bundleName() 

返回包的名称。

  • 在 macOS 和 iOS 上,如果路径 isBundle(),这将返回包的正确本地化名称。
  • 在其他平台上,返回一个空的 QString。 
 QFileInfo fi("/Applications/Safari.app");
 QString bundle = fi.bundleName();                // name = "Safari"

8、bool caching()

是否启用了缓存。

9、QString canonicalFilePath()

      std::filesystem::path filesystemCanonicalFilePath()

返回包含文件名的规范路径。

10、QString canonicalPath() 

       std::filesystem::path filesystemCanonicalPath()

返回文件的路径规范路径(不包括文件名)。

11、QString completeBaseName() 

返回不带路径的文件的完整基本名称。

    QFileInfo info("C:/Users/70957/Pictures/aaa.bbb.jpg");
    qDebug()<<info.baseName();
    qDebug()<<info.completeBaseName();

12、QString completeSuffix()

返回文件的完整后缀(扩展名)。完整的后缀由文件中第一个 '.' 之后的所有字符组成。

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

 13、QDir dir()

以 QDir 对象的形式返回对象的父目录的路径。

注意:返回的 QDir 总是对应于对象的父目录,即使 QFileInfo 代表一个目录。

对于以下每个 QFileInfo,dir() 返回 QDir“~/examples/191697”。

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

对于以下每个 QFileInfo,dir() 返回 QDir“.”。

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

14、bool exists()

文件是否存在。

注意:如果文件是指向不存在文件的符号链接,则返回 false。

       [static] bool exists(const QString &file)

使用此静态函数比使用非静态的重载函数进行文件系统访问更快。

15、QString fileName() 

返回文件的名称,不包括路径。

    QFileInfo info("C:/Users/70957/Pictures/aaa.bbb.jpg");
    qDebug()<<info.baseName();
    qDebug()<<info.completeBaseName();
    qDebug()<<info.fileName();

16、QString filePath()

       std::filesystem::path filesystemFilePath()

返回文件名,包括路径。

17、QDateTime fileTime(QFile::FileTime time) 

返回时间指定的文件时间。如果文件是符号链接,则返回目标文件的时间。

enum QFileDevice::FileTime:

  • FileAccessTime:最近一次访问文件的时间(例如读取或写入)。
  • FileBirthTime:创建文件时(在 UNIX 上可能不支持)。
  • FileMetadataChangeTime:上次更改文件元数据的时间。
  • FileModificationTime:最近一次修改文件的时间。 

18、QString group() 

返回文件的组。如果文件是符号链接,则此函数返回目标的拥有组。

在 Windows 、文件没有组的系统上返回空字符串。在 Unix 下可能很耗时(毫秒为单位)。

19、uint groupId() 

返回文件所属组的 id。如果文件是符号链接,则此函数返回拥有目标的组的 ID(。 

在 Windows 、文件没有组的系统上,此函数始终返回 (uint) -2。

20、QString junctionTarget() 

       std::filesystem::path filesystemJunctionTarget()

将 NTFS 结点解析为它引用的路径。不能保证由 NTFS 联结命名的目录确实存在。

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

21、QDateTime lastModified()

返回上次修改文件的日期和本地时间。如果文件是符号链接,则返回目标文件的时间。

22、QDateTime lastRead()

返回上次读取文件的日期和本地时间。如果文件是符号链接,则返回目标文件的时间。

在此信息不可用的平台上,返回与 lastModified() 相同的内容。

23、bool makeAbsolute()

如果文件的路径不是绝对路径,则将文件的路径转换为绝对路径。

返回 true 表示路径已转换; 否则返回 false 表示路径已经是绝对路径。

24、QDateTime metadataChangeTime()

返回文件元数据更改的日期和时间。如果文件是符号链接,则返回目标文件的时间。

25、QString owner() 

返回文件的所有者。在文件没有所有者的系统上,或者如果发生错误,则返回空字符串。

如果文件是符号链接,则此函数返回目标的所有者。 

这个函数在 Unix 下可能很耗时(毫秒为单位)。

在 Windows 上,除非启用了 NTFS 权限检查,否则它将返回一个空字符串。

26、uint ownerId()

返回文件所有者的 ID。如果文件是符号链接,则此函数返回目标所有者的 ID。

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

27、QString path() 

        std::filesystem::path filesystemPath() 

返回文件的路径。不包括文件名。

28、bool permission(QFile::Permissions permissions) 

测试文件权限。权限参数可以是多个 QFile::Permissions 类型的标志或一起检查权限组合。

在文件没有权限的系统上,此函数始终返回 true。

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

如果文件是符号链接,则此函数会检查目标的权限。

enum QFileDevice::Permission:文件的权限和所有权。可以将这些值进行 OR 运算以测试多个权限和所有权值。

  • ReadOwner:文件可供所有者读取。
  • WriteOwner:文件可供所有者写入。
  • ExeOwner:文件可供所有者执行。
  • ReadUser:文件可供用户读取。
  • WriteUser:文件可供用户写入。
  • ExeUser:文件可供用户执行。
  • ReadGroup:文件可供组读取。
  • WriteGroup:文件可供组写入。
  • ExeGroup:文件可供组执行。
  • ReadOther:文件可供任何人读取。
  • WriteOther:文件可供任何人写入。
  • ExeOther:文件可供任何人执行。

29、QFile::Permissions permissions()

返回文件的 QFile::Permissions 的完整 OR 组合。

如果文件是符号链接,则此函数返回目标(而不是符号链接)的权限。

30、void refresh()

刷新有关文件的信息,即在下次获取缓存属性时从文件系统中读取信息。 

31、void setCaching(bool enable)

设置是否启用文件信息的缓存。默认情况下启用缓存。 

启用缓存后,将会首次在需要时从文件系统读取文件信息,之后从缓存中读取文件信息。

32、void setFile(const QString &file)

        void setFile(const std::filesystem::path &file)

设置 QFileInfo 提供有关文件的信息的文件。

文件可以包括绝对或相对路径。绝对路径以目录分隔符(例如 Unix 下的“/”)或驱动器规范(Windows 下)开头。 相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。

  QString absolute = "/local/bin";
  QString relative = "local/bin";
  QFileInfo absFile(absolute);
  QFileInfo relFile(relative);

  QDir::setCurrent(QDir::rootPath());
  // absFile 和 relFile 现在指向同一个文件

  QDir::setCurrent("/tmp");
  // absFile 现在指向“/local/bin”,
  // 而 relFile 指向“/tmp/local/bin”

       void setFile(const QDir &dir, const QString &file)

设置 QFileInfo 为目录 dir 中的 file 提供信息的文件。

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

33、qint64 size()

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

如果文件是符号链接,则返回目标文件的大小。 

34、void stat()

从文件系统中读取所有属性并缓存。

当有关文件系统的信息在工作线程中收集,然后以缓存 QFileInfo 实例的形式传递给 UI 时,这很有用。

35、QString suffix() 

返回文件的后缀(扩展名)。后缀由文件中最后一个“.”之后的所有字符组成。

36、QString symLinkTarget() 

        std::filesystem::path filesystemSymLinkTarget()

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

37、bool operator==(const QFileInfo &fileinfo) 

此 QFileInfo 对象是否引用与 fileinfo 位于同一位置的文件。

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

三、宏成员

1、QT_IMPLICIT_QFILEINFO_CONSTRUCTION

定义这个宏会使大多数 QFileInfo 构造函数隐式而不是显式。由于 QFileInfo 对象的构建成本很高,因此应避免意外创建它们。例如:

    QDir dir("D:/迅雷下载");
    QDirIterator it(dir);
    while (it.hasNext())
    {
        QFileInfo fi = it.next();
        qDebug()<<fi.fileName();
    }

默认情况下,会报错:试图将QString转成QFileInfo:

在 pro 文件中加入:

DEFINES += QT_IMPLICIT_QFILEINFO_CONSTRUCTION

则可编译通过。

要避免隐式构造 QFileInfo 对象的代价,应该不要使用这个宏。

同时,这里正确获取 QFileInfo 对象的方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值