QFileInfo

article/2025/8/23 15:16:11

一、描述

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 对象的方法:


http://chatgpt.dhexx.cn/article/bPg0EbXo.shtml

相关文章

QFile详解(文件如果不存在则创建、判断文件是否存在、获得文件的各种详细信息、读写文件)

目录 一、QFile文件如果不存在则创建的方法 二、QFile判断文件是否存在的方法 三、QFileInfo的方法获得文件的各种详细信息 四、QFile读写文件的内容 一、QFile文件如果不存在则创建的方法 QFile f("./1234.ini");if(!f.open(QIODevice::Append)){return 0;} op…

QFile文件读写

文章目录 简介常用apiQFile类读写文件QFileQTextStream读写文件 简介 QFile类提供了一个读取和写入文件的接口&#xff0c;一个读写文本、二进制文件和资源的I/O设备。 QFile读写文件的两种方式&#xff1a; 1.QFile可以单独使用。 2.QFile与QTextStream或QDataStream一起使用…

Qt之Qfile读取文件操作

文件系统&#xff1a;   文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象&#xff0c;这些设备具有读写字节块的能力。下面是 I/O 设备的类图&#xff08;Qt5&#xff09;&#x…

常用性能测试工具的比较

目录 性能测试的重要性针对接口的性能测试 性能测试基准接口性能测试的主要指标abenchjMeterKelude性能脚本各种监控工具 参考总结 性能测试的重要性 众所周知性能测试在软件测试中占有举足轻重的作用&#xff0c;尤其是对于互联网产品这种具有大用户量&#xff0c;大数据量&a…

推荐几款常用的性能测试工具

“ 对内容不感兴趣拉到最后领取今天的外卖红包。” 常用的性能测试工具 对于开发人员来说&#xff0c;首选是一些开源免费的性能&#xff08;压力&#xff09;测试软件&#xff0c;例如 ab&#xff08;ApacheBench&#xff09;、JMeter 等&#xff1b;对于专业的测试团队来说&…

10款主流的软件测试工具,你用过吗?

随着软件快速交付需求的增长&#xff0c;越来越多的企业开始通过DevOps方法加速软件开发速度但这样的话&#xff0c;有时候就无法保证质量&#xff0c;所以今天小编就来给大家介绍10款主流的软件测试工具&#xff0c;供大家参考。 1、UFT / QTP UFT&#xff0c;前身为Quick …

10款好用的自动化测试工具

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 如果你也想学习软件测试&#xff0c;文末卡片有我的交流群&#xff0c;加入我们&#xff0c;一…

常用的软件测试工具大全

开源测试管理工具&#xff1a;Bugfree、Bugzilla、TestLink、mantis 开源功能自动化测试工具&#xff1a;Watir、Selenium、MaxQ、WebInject 开源性能自动化测试工具&#xff1a;Jmeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator **[TestDirector]&…

软件测试工作中有哪些常用的工具?

软件测试工作中有哪些常用的工具&#xff1f;一般来说有开源测试管理工具、开源功能自动化测试工具、开源性能自动化测试工具、Quality Center、QuickTest Professional、LoadRunner等。 一、推荐10款常见的软件测试工具: &#xff08;1&#xff09;Bugfree BugFree是借鉴微软的…

我们常用的软件测试工具有哪些?

一名优秀的软件测试工程师&#xff0c;我觉得他一定也是一名善用工具的好手&#xff0c;他知道在软件测试领域都有哪些测试工具&#xff0c;这些工具都有什么优缺点&#xff0c;这些工具适合在什么情况下使用 &#xff0c;反馈的结果是什么&#xff0c;知道各种工具之间如何配合…

测试工具类

目录 测试接口管理工具&#xff1a; Swagger Eolink APIKit Apipost7  Apifox 自动化测试平台&#xff1a; Choerodon猪齿鱼 MeterSphere RPA 自动化测试框架 Appium Robot Framework Selenium python 自动化测试框架 1.Robot Framework 2.Pytest 3.UnitTest…

软件测试工具有哪些(软件测试常用的工具都有哪些)

一、一个从事软件测试行业十年的老司机列出以下与软件测试相关的工具&#xff1a; 1.操作系统&#xff1a; Linux&#xff1a;vmware、xshell 、xftp 、ssh2.数据库&#xff1a; 主流是以下三种数据库&#xff0c;尤其是MySQL以及oralce,在测试中必会的技能是对表的相关操作&…

软件测试工具都有哪些

小编今天把软件测试常见的工具列了一下&#xff0c;看看有没有你现在在用的&#xff1f; 开源测试管理工具&#xff1a;Bugfree、Bugzilla、TestLink、mantis 开源功能自动化测试工具&#xff1a;Watir、Selenium、MaxQ、WebInject 开源性能自动化测试工具&#xff1a;Jmeter…

10大主流性能测试工具,总有一款适合你

市面上流行的压力/负载/性能测试工具多是来自国外&#xff0c;近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同&#xff0c;其功能也有很大差异&#xff0c;下面就为您简单介绍10款目前最常见的测试产品。 01 kylinTOP测试与监控平台&#xff08;商…

10个常用的软件测试工具,你不容错过

在现代软件开发中&#xff0c;软件测试是不可或缺的一部分。为了确保软件产品的质量和稳定性&#xff0c;软件测试工具成为了测试团队的得力助手。 有许多优秀的软件测试工具可以帮助测试人员在各种测试活动中提高效率和准确性。 本文将介绍10个常用的软件测试工具&#xff0c;…

Android 实现锚点定位

相信做前端的都做过页面锚点定位的功能&#xff0c;通过<a href"#head"> 去设置页面内锚点定位跳转。 本篇文章就使用tablayout、scrollview来实现android锚点定位的功能。 效果图&#xff1a; 实现思路 1、监听scrollview滑动到的位置&#xff0c;tablayout切…

为什么定位不了HTML,css 锚点定位不了

css 锚点定位不了 css 锚点定位不了只有一个原因&#xff0c;就是书写错误&#xff0c;锚点的正确书写方式有两种&#xff0c;下面为各位介绍一下。 1、使用a标签设置锚点&#xff1a; ①&#xff1a;设置一个锚点链接 html&#xff1b;(注意&#xff1a;href属性的属性值最前面…

vue项目中实现锚点定位

使用场景&#xff1a;当页面被分割成许多小模块&#xff0c;且页面很长时&#xff0c;锚点功能可以帮助我们快速跳转到想要的模块&#xff1b;而当滑动滚动条时&#xff0c;根据当前视图中的显示的模块自动选中对应的锚点。 思路 锚点的id对应模块的元素的id。点击锚点时&#…

Vue3项目中锚点定位实现

代码 <!doctype html> <html class"no-js"><head><meta charset"utf-8"><title>锚点</title><script src"https://unpkg.com/vue3/dist/vue.global.js"></script><link rel"styleshee…

锚点定位——如何设置锚点居页面顶部距离,锚点定位并距离顶部一定偏移

锚点是网页制作中超级链接的一种&#xff0c;又叫命名锚记。命名锚记像一个迅速定位器一样是一种页面内的超级链接&#xff0c;运用相当普遍。 使用命名锚记可以在文档中设置标记&#xff0c;这些标记通常放在文档的特定主题处或顶部。然后可以创建到这些命名锚记的链接&#…