【Qt之QFileInfo】使用

描述

QFileInfo类提供了与系统无关的文件信息。
QFileInfo提供有关文件的名称和位置(路径)在文件系统中的信息,以及它的访问权限、是否为目录或符号链接等。还可以获取文件的大小和最后修改/读取时间。QFileInfo还可以用于获取关于Qt资源的信息。
QFileInfo可以指向具有相对或绝对文件路径的文件。绝对文件路径以目录分隔符“/”(或在Windows上以驱动器规范开头)。相对文件名以目录名或名开头,并指定相对于当前工作目的路径。绝对路径的示例是字符串“/tmp/quartz”。相对路径可能看起来像“src/fatlib”。可以使用函数isRelative()检查QFileInfo是否使用对或绝对文件路径您可以调用函数makeAbsolute()将相对QFileInfo的路径转换为绝对路径。
QFileInfo所操作的文件在构造函数中或以后通过set()设置。使用exists()来检查文件是否存在,size()来获取文件。
可以使用isFile()isDir()isSymLink()获取文件的类型。symLinkTarget()函数提供了符号链接指向的文件的名称。
在Unix(括macOS和iOS)上,符号链接与指向的文件相同大小(),因为Unix透明处理符号链接;同样,使用QFile打开符号链接实际上打开了链接的目标。例如:

#ifdef Q_OS_UNIX
QFileInfo info1("/home/bob/bin/untify");
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.symLink());
info2.isSymLink();          // returns false
info2.absoluteFilePath();   // returns "/opt/pretty++/bin/untabify"
info2.size(); // returns 56201
#endif

在Windows上,符号链接(快捷方式)是.lnk文件。报告的size()是符号链接的大小(而不是链接的目标),使用QFile打开符号链接会打开.lnk。例如:

#ifdef Q_OS_WINQFileInfo 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++/abify"QFileInfo info2(info1.symLinkTarget());
info2.isSymLink();          returns false
info2.absoluteFilePath();   // returns "CPretty++/untabify"
info2.size();               returns 63942#endif

可以使用path()fileName提取文件名的元素。可以使用baseName()suffix()completeSuffix()提取fileName()的各个部。由Qt类创建的FileInfo对象的目录将不具有尾部文件分隔符。如果希望在自己的文件信息对象中使用尾分隔符,只需将其附加到构造函数或setFile()给定的文件名即可。
文件的日期由created()、lastModified()和lastRead()返回。可以使用isReadable()、isWritable()和is()获取有关文件的访问权限的信息。文件的所有权可以从owner()、ownerId、group()和groupId()中获取。可以使用permission()一次性检查文件的权限和所有权。
注意:在NTFS文件系统上,默认情况下禁用所有权和权限检查,以提高性能。要启用它,请包含以下行:

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;

然后通过递增和递减qt_ntfs_permission_lookup 1次来打开和权限检查。

qtfs_permission_lookup++; // turn on
qt_ntfs_permission--; // turn it off again

常用函数及示例

  • QFileInfo::QFileInfo()
    构造一个空的QFileInfo对象。

  • QFileInfo::QFileInfo(const QString &file)
    构造一个新的QFileInfo,提供关于给定文件的信息。该文件还可以包括绝对或相对路径。

  • QFileInfo::QFileInfo(const QFile &file)
    构造一个新的QFileInfo,提供关于文件file的信息。
    文件具有相对路径QFileInfo也将具有相对路径。

  • QFileInfo::QFileInfo(const QDir &dir, const QString &file)
    构造一个新的QFileInfo,提有关目录dir中定文件的信息。
    如果dir具有相对路径,FileInfo也将具有相路径。
    如果file是绝对路径,则会忽略指定的目录。

  • QFileInfo::QFileInfo(const Q &fileinfo)
    构造一个新的QFileInfo,是给定fileinfo的本。

  • QFileInfo::~QFileInfo()
    销毁QFileInfo并释放其资源。

  • QDir QFileInfo::absoluteDir() const
    返回文件的绝对路径作为QDir对象。

  • QString QFileInfo::absoluteFilePath() const
    返回包括文件名在内的绝对路径。
    绝对路径名称由完整路径和文件名组成在Unix上,它始以根目录’/'开头的路径。在Windows上,它始终以D:/”开头,其中D是一个驱器号,但不包括未映射到驱动器的网络共享,此时路径将以“//sharename/”开头。Q将驱动器号写。请注意,QT不会这样做。下面的代码段展了这一点。

   QFileInfo fi("c:/temp/foo"); => fi.absoluteFilePath() => "C:/temp/foo"

该函数与filePath()返回相同,除非isRelative为true。与canonicalFilePath()不同,符号链接或多余的“.”“…”元素不一定会被删除。
注意:如果filePath()为空此函数的行为未定义。

  • QString QFileInfo::absolutePath() const
    返回文件的绝对路径,不包文件名。
    在Unix上,绝对路径将始终根目录’/'头的路径。在Windows上,它始终以“D:/”开头,其中D是驱动器号,但不包括未映射到驱动器号的网络共享,此时路径以“//sharename/”开头。
    与canonicalPath() 不同,符号或多余的“.”“…”元素不一定会被删除。
    警告:如果filePath()为空,则此函数的行为未定义。

  • QString QFileInfo::baseName() const
    返回文件基本名称,不包括路径。
    基本名称文件中的所有字符组,直到(但不包括)第一个“.”字符。
    例如:

  QFileInfo fi("/tmp/archive.tar.gz");QString base = fi.baseName();  // base = "archive"

文件的基本名称在所有平台上计算方式相同,文件命名约定无关(例如,在Unix上,“.bashrc”的基本名称为空,后缀是“rc”)。

  • QString QFileInfo::bundleName const
    返回bundle的名称。
    在macOS和iOS上,如果路径是Bundle,则返回Bundle的正确本地化名称。在所有平台上,返回空的QString。
    示例:
  QFileInfo fi("/Applications/Safari.app");QString bundle = fi.bundleName();                // name = "Safari"
  • bool QFileInfo::caching() const
    如果启用了缓存,则返回true;否则返回false。

  • QString QFileInfo::canonicalFilePath() const
    返回包括文件名的规范路径,即没有符号或冗余的"."或…"元素的绝对路径。
    如果文件不存在,canonicalFilePath()返回一个空字符串。

  • QString QFileInfo::canonicalPath() const
    返回文件的规范路径(不包括文件名即没有符号链接或冗余的".“或”…"元素的绝对路径如果文件不存在,canonicalPath()返回一个空字符串。

  • QString QFileInfo::completeBaseName() const
    返回不带路径的文件的完整基本名称。
    完整的基本名称由中最后一个’.'字符之前的所有字符组成。
    示例:

  QFileInfo fi("/tmp/archive.tar.gz");QString base = fi.completeBaseName();  // base = "archive.tar"
  • QString QFileInfo::completeSuffix() const
    返回文件的完整后缀(扩展名)。
    完整扩展名由文件中第一个’.'之后的所有字符组成。
    示例:
  QFileInfo fi("/tmp/archive.tar.gz");QString ext = fi.completeSuffix();  // ext = "tar.gz"
  • QDateTime QFileInfo::created() const
    文件创建的日期和本地时间。
    在大多数Unix系统上,该函数返回最后一次状态更改的时间状态更改发生在文件创建时,但也会在用户写入或设置inode信息时发生(例如,更改文件权限)。
    既不可用创建时间不可用“最一次状态更改”时间,则返回与lastModified()同的时间。

  • QDir QFileInfo::dir() const
    以Dir对象的形式返回对象的父目录路径。
    注意:返回的QDir始终对应于对象的父目录,即使QFileInfo表示一个目录。
    对于以下每个示例,dir()将返回Dir"~/examples/697"。

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

对于以下每个示例,dir()将返回Dir"."。

      QFileInfo fileInfo4(".");Q fileInfo5("..");QFileInfo fileInfo6("main.cpp");
  • bool QFileInfo::exists() const
    如果文件存在,则返回true;否则返回false。
    注意:如果是一个指向不存在文件的符号链接,则返回false

  • [statis] bool QFileInfo::exists(const QString &file)
    如果文件存在,则返回true;否则返回false。
    注意:如果file是一个指不存在文件的符号链接返回false。
    注意:与使用QFileInfo(file).exists()进行文件系统访问相比,使用此函数更快速。

  • QString QFileInfo::fileName() const
    返回文件的,不包括路径。
    示例:

  QFileInfo fi("/tmp/archive.tar.gz");QString name = fi.fileName();                // 名称为"archive.tar.gz"

注意,如果这个QFileInfo对象给出斜杠结尾的路径文件的名称被认是空的。

  • QString QFileInfo::filePath() const
    返回包括路径文件名(可以是绝对或相对的)。

  • QString QFileInfo::group() const
    返回文件所属的组。在Windows上,以及文件没有组的上,或者出现错误时,返回空字符串。
    在Unix系统上,这个函数可能需要一些时间(几毫秒级)。

  • uint QFileInfo::groupId() const
    返回文件所的组的ID。
    对于没有组的系统和Windows系统,该函数总是返回(uint)-2。

  • bool QFileInfo::isAbsolute() const
    如果文件路径名是绝对的,则返回true,否则如果路径是相对的则返回false。

  • bool QFileInfo::isBundle() const
    如果此对象指向macOS和iOS上的一个bundle或bundle的符号链接,则返回true;否则返回false。

  • bool QFileInfo::isDir() const
    如果此对象指向一个目录或目录的符号链接,则返回true;否则返回false。

  • bool QFileInfo::isExecutable() const
    如果文件可执行,则返回true否则返回false。

  • bool QFileInfo::isFile() const
    如果此对象指向一个文件或文件的符号链接,则返回true。如果对象指向不是文件的东西,比如一个目录,则返回false。

  • bool QFileInfo::isHidden() const
    如果这是一个“隐藏”文件,则返回true;否则返回false。
    注意:这个函数在Unix上对于特殊的条目“.”和“…”也返回,尽管QDir::List对待它们不是这样。

  • bool QFileInfo::isNativePath() const
    如果文件路径可以直接在本机API使用,则返回true。如果文件由Qt内部的虚拟文件系统支持,例如Qt资源系统,则返回false。
    注意:根据平台和本机API的输入要求,本机路径可能仍然需要转换分隔符和字符编码。

  • bool QFileInfo::isReadable() const
    如果用户可以读取该文件,则返回true;否则返回false。
    注意:如果未启用NTFS权限检查,在Windows上的结果仅反映文件是否存在。

  • bool QFileInfo::isRelative() const
    如果文件路径名是相对的,则返回true;否则false(例如,在Unix上,如果路径以“/”开头,则是绝对路径)。

  • bool QFileInfo::isRoot() const
    如果该对象指向一个目录或目录的符号链接,并且该目录是根目录,则返回true;否则返回false。

  • bool QFileInfo::isSymLink() const
    如果此对象指向一个符号链接,则返回true;否则返回false。符号链接存在于Unix(包括macOS和iOS和Windows上,并且通常由ln -s 或者 mklink命令创建。打开符号链接实际上是打开链接目标。
    此外,在上,对于快捷方式(*.lnk文件),也将返回true。打开它们将打开.lnk文件本身。
    示:

  QFileInfo info(fileName);if (info.isSymLink())fileName = info.symLinkTarget();

注意:如果号链接指向一个不存在文件,则exists()返回false。

  • bool QFileInfo::isWritable() const
    如果用户可以写入文件,则返回true;否则返回false。
    注意:如果未启用NTFS权限检查,则在Windows上的结果将只反映文件是否标记为只读。

  • QDateTime QFileInfo::lastModified() const
    返回文件上次修改的日期和本地时间。

  • QDateTime QFileInfo::lastRead() const
    返回文件上次读取(访问)的日期和本地时间。
    在不支持此信息的平台上,返回与lastModified()相同的结果。

  • bool QFileInfo::makeAbsolute()
    如果文件的路径不是绝对路径,则将其转换为绝对路径。返回true表示路径已经转换;否则返回false表示路径已经是绝对路径。

  • QString QFileInfo::owner() const
    返回文件的所有者。在没有所有者的文件系统或发生错误时,返回空字符串。
    在Unix下,此函数可能需要时间(大约几毫秒)。在Windows下,除非启用了NTFS权限检查,否则将返回空字符串。

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

  • QString QFileInfo::path() const
    返回文件的路径。不包括文件名。
    请注意,如果此QFileInfo对象给出以斜杠结尾的路径,则文件名被视为空,此函数将返回整个路径。

  • bool QFileInfo::permission(QFile::Permissions permissions) const
    测试文件权限。permissions参数可以是QFile :: Permissions类型的多个标志的OR结果,以检查权限组合。
    在没有文件权限的系统上,此函数始终返回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");
  • QFile :: Permissions QFileInfo::permissions() const
    返回文件的完整OR-ed组合QFile :: Permissions。
    注意:如果未启用NTFS权限检查,在Windows上的结果可能不准确。

  • void QFileInfo::refresh()
    刷新文件的信息,即在下次获取缓存属性时从文件系统中读取信息。

  • void QFileInfo::setCaching(bool enable)
    如果enable为true,则启用文件信息的缓存。如果enable为false,则禁用缓存。
    当启用缓存时,QFileInfo在第一次需要文件信息时从文件系统中读取文件信息,但通常不会在以后读取。
    缓存默认启用。

  • void QFileInfo::setFile(const QString &file)
    将QFileInfo所提供的有关文件的信息设置为file。
    文件也可以包括绝对或相对文件路径。绝对路径以目录分隔符开始(例如Unix下的"/")或驱动器规范(Windows下)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。
    示例:

  QString absolute = "/local/bin";QString relative = "local/bin";QFileInfo absFile(absolute);QFileInfo relFile(relative);QDir::setCurrent(QDir::rootPath());// absFile and relFile now point to the same fileQDir::setCurrent("/tmp");// absFile now points to "/local/bin",// while relFile points to "/tmp/local/bin"
  • void QFileInfo::setFile(const QFile &file)
    这是一个重载函数。
    将QFileInfo所提供的有关文件的信息设置为file。
    如果file包含相对路径,QFileInfo也将具有相对路径。

  • void QFileInfo::setFile(const QDir &dir, const QString &file)
    这是一个重载函数。
    将QFileInfo所提供的有关文件的信息设置为目录dir中的文件。
    如果file包含相对路径,QFileInfo也将具有相对路径。

  • qint64 QFileInfo::size() const
    以字节为单位返回文件大小。如果文件不存在或无法获取,则返回0。

  • QString QFileInfo::suffix() const
    返回文件的后缀(扩展名)。
    后缀是指文件中最后一个’.'之后的所有字符。
    示例:

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

文件的后缀在所有平台上都是相同计算的,与文件命名约定无关(例如,在Unix上的".bashrc"具有空的基本名称,后缀为"bashrc")。

  • void QFileInfo::swap(QFileInfo &other)
    将该文件信息与其他文件信息交换。此函数非常快且不会失败。

  • QString QFileInfo::symLinkTarget() const
    返回符号链接指向的文件或目录的绝对路径,如果对象不是符号链接,则返回空字符串。
    此名称可能不表示现有文件;它只是一个字符串。如果符号链接指向现有文件,则QFileInfo::exists()将返回true。

完整示例及结果输出

#include <QCoreApplication>
#include <QFileInfo>
#include <QDebug>
#include <QDateTime>
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 指定要检查的文件或目录的路径QString path = "C:\\Users\\80943\\Desktop/test.txt.txt";// 创建一个QFileInfo对象,并传入文件或目录的路径QFileInfo fileInfo(path);// 检查是否是目录if(fileInfo.isDir()) {qDebug() << "It's a directory.";} else {qDebug() << "It's not a directory.";}// 创建时间qDebug() << "created: " << fileInfo.created();// 获取基础名称qDebug() << "Base name: " << fileInfo.baseName();// 完整基础名称qDebug() << "completeBaseName: " << fileInfo.completeBaseName();// 获取文件路径qDebug() << "File path: " << fileInfo.filePath();// 获取绝对文件路径qDebug() << "Absolute file path: " << fileInfo.absolutePath();// 是否是相对路径qDebug() << "Relative file path: " << fileInfo.isRelative();// 获取后缀qDebug() << "Suffix: " << fileInfo.suffix();// 完整后缀qDebug() << "completeSuffix: " << fileInfo.completeSuffix();// 文本名称qDebug() << "fileName: " << fileInfo.fileName();// bundleNameqDebug() << "bundleName: " << fileInfo.bundleName();// 检查文件或目录是否存在if(fileInfo.exists()) {qDebug() << "It exists.";} else {qDebug() << "It doesn't exist.";}// 检查是否使用了缓存if(fileInfo.isReadable()) {qDebug() << "It's readable.";} else {qDebug() << "It's not readable.";}return a.exec();
}

输出

在这里插入图片描述

应用场景

  1. 文件选择和打开:可以使用QFileInfo来获取选中文件的路径、名称和属性,进而打开和操作该文件。
  2. 文件比较:QFileInfo可以获取文件的许多属性,包括大小、修改时间等,可以用于比较两个文件是否相同或有何异同。
  3. 文件搜索:QFileInfo可以配合QDir一起使用,用于在特定目录或其子目录中查找文件。可以根据文件名、大小、修改时间等属性进行搜索。
  4. 权限管理:QFileInfo可以用于检查用户对文件的访问权限,例如判断用户是否有权读取、写入或执行该文件。
  5. 文件展示:可以将QFileInfo获取的文件信息展示给用户,例如在文件浏览器或资源管理器中显示文件的详细信息。

结论

愿你眼里的星星温柔泛滥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218429.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

U盘报错无法访问文件或目录损坏且无法读取

使用电脑打开U盘的部分文件时提示无法访问&#xff0c;文件或目录损坏且无法读取 报错内容如下图&#xff1a; 因为我这个U盘是那种双接口的 Type-C和USB&#xff0c;前段时间被我摔了一下 看网上说这种双接口的U盘USB接口容易坏掉 尝试在手机上使用OTG打开&#xff0c;先测试…

Canvas艺术之旅:探索锚点抠图的无限可能

说在前面 在日常的图片处理中&#xff0c;我们经常会遇到需要抠图的情况&#xff0c;无论是为了美化照片、制作海报&#xff0c;还是进行图片合成。抠图对于我们来说也是一种很常用的功能了&#xff0c;今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能。 效果展示…

【云备份】文件操作实用工具类设计

文章目录 为什么要单独设计文件工具类&#xff1f;整体实现Filesize ——文件大小stat接口 LastMTime ——最后一次修改时间LastATime —— 最后一次访问时间FileName —— 文件名称GetPostLen ——获取文件指定位置 指定长度的数据GetContnet —— 读取文件数据SetContent ——…

搜索 C. Tic-tac-toe

Problem - C - Codeforces 思路&#xff1a;搜索&#xff0c;判断合法性。从起始态用搜索进行模拟&#xff0c;这样可以避免后面判断合法性这一繁琐的步骤。用一个map进行映射当前态及对应的结果。剪枝&#xff1a;如果当前字符串已经被搜索过&#xff0c;则直接跳过去。 代码…

交换机的VRRP主备配置例子

拓朴如下&#xff1a; 主要配置如下&#xff1a; [S1] vlan batch 10 20 # interface Vlanif10ip address 10.1.1.1 255.255.255.0vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface Vlanif20ip address 13.1.1…

最新AI创作系统ChatGPT网站运营源码、支持GPT-4-Turbo模型,图片对话识图理解,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&#xff0c;持续集成AI能力到本系统。支持OpenAI DALL-E3文生图&#xff0c;…

网页设计作业-音乐网站首页

效果图 网盘链接 链接&#xff1a;https://pan.baidu.com/s/1CO4jAOY0zk1AWTx_pC3UmA?pwdfuck 提取码&#xff1a;fuck

macos安装小软件 cmake

一&#xff0c;cmake下载主页 Download CMake 二&#xff0c;下载&#xff0c;解压&#xff0c;配置&#xff0c;编译&#xff0c;安装 0. 假设macos中已经存在了 clang和make工具 1. 通过网页下载最新的稳定版 cmake***.tar.gz 源代码 2. tar zxf cmake***.tar 3. cd cmake***…

linux的netstat命令和ss命令

1. 网络状态 State状态LISTENING监听中&#xff0c;服务端需要打开一个socket进行监听&#xff0c;侦听来自远方TCP端口的连接请求ESTABLISHED已连接&#xff0c;代表一个打开的连接&#xff0c;双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…

雅可比矩阵(Jacobian Matrix)

假设给定一个从n维欧式空间到m维欧式空间的变换: 雅可比矩阵就是将一阶偏导数排列成一个m行、n列形式的矩阵&#xff0c;记作&#xff1a; 举一个例子&#xff1a; 雅可比矩阵等于&#xff1a;

解决视口动画插件jquery.aniview.js使用animate.css时无效的问题(最新版本网页视口动画插件的使用及没作用、没反应)

当网站页面元素进入视口时自动应用过渡效果。CSS过渡效果可以为网页添加动画效果&#xff0c;并提供了一种平滑的转换方式&#xff0c;使元素的变化更加流畅和生动。而通过jQuery插件来获取页面滚动位置决定合适调用动画效果。 一、官网 animate.css官网 一款强大的预设css3动…

Mybatis-Plus 租户使用

Mybatis-Plus 租户使用 文章目录 Mybatis-Plus 租户使用一. 前言1.1 租户存在的意义1.2 租户框架 二. Mybatis-plus 租户2.1 租户处理器2.2 前置准备1. 依赖2. 表及数据准备3. 代码生成器 2.3 使用 三. 深入使用3.1 前言3.2 租户主体设值&#xff0c;取值3.3 部分表全量db操作3…