二十九、获取文件属性及相关信息

二十九、获取文件属性及相关信息QFileInfo

QFileInfo 提供有关文件在文件系统中的名称 位置 (路径)、访问权限及它是目录还是符号链接、等信息。文件的大小、最后修改/读取时间也是可用的。QFileInfo 也可以被用于获取信息有关 Qt resource .

QFileInfo 可以指向具有相对或绝对文件路径的文件。绝对文件路径以目录分隔符“/”开头(或以 Windows 上的驱动器规范开头)。相对文件名以目录名称或文件名开头,并指定相对于当前工作目录的路径。绝对路径的一个示例是字符串“/tmp/quartz”。相对路径可能类似于“src/fatlib”。您可以使用函数 isRelative () 来检查 QFileInfo 是使用相对文件路径还是绝对文件路径。您可以调用函数 makeAbsolute () 将相对 QFileInfo 的路径转换为绝对路径。

QFileInfo 处理的文件是在构造函数中设置的,或者以后使用 setFile () 进行设置。使用 exists () 查看文件是否存在,使用 size () 获取其大小。

文件的类型是用 isFile ()、 isDir () 和 isSymLink () 获取的。 symLinkTarget () 函数提供符号链接指向的文件的名称。

完成以下功能

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>#include<QLabel>
#include<QLineEdit>
#include<QCheckBox>
#include<QPushButton>
#include<QFileDialog>
#include<QDateTime>
#include<QHBoxLayout>
#include<QVBoxLayout>QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:Ui::Dialog *ui;QLabel *labelFileName;QLineEdit *lineFileName;QPushButton *buttonFileName;QLabel *labelFileSize;QLineEdit *lineFileSize;QLabel *labelFileCreateTime;QLineEdit *lineFileCreateTime;QLabel *labelFileModifyTime;QLineEdit *lineFileModifyTime;QLabel *labelFileAccessTime;QLineEdit *lineFileAccessTime;QLabel *labelFileAttribute;QCheckBox *checkFile;QCheckBox *checkHide;QCheckBox *checkReadable;QCheckBox *checkWritable;QCheckBox *checkExecute;QPushButton *buttonGetFileAttributeInfo;private slots:void getFilePathAndName();void getFileAttributeInfo();
};
#endif // DIALOG_H

 dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);  // 设置用户界面resize(500,300);  // 设置对话框的大小为500x300像素// 创建标签和输入框来显示文件路径名称labelFileName=new QLabel("文件路径名称:");lineFileName=new QLineEdit;buttonFileName=new QPushButton("打开文件..");// 创建标签和输入框来显示文件大小labelFileSize=new QLabel("文件容量大小:");lineFileSize=new QLineEdit;// 创建标签和输入框来显示文件创建时间labelFileCreateTime=new QLabel("文件创建时间:");lineFileCreateTime=new QLineEdit;// 创建标签和输入框来显示文件最后修改时间labelFileModifyTime=new QLabel("最后修该时间:");lineFileModifyTime=new QLineEdit;// 创建标签和输入框来显示文件最后访问时间labelFileAccessTime=new QLabel("最后访问时间:");lineFileAccessTime=new QLineEdit;// 创建标签和复选框来显示文件属性labelFileAttribute=new QLabel("文件属性");checkFile=new QCheckBox("文件");checkHide=new QCheckBox("隐藏属性");checkReadable=new QCheckBox("只读属性");checkWritable=new QCheckBox("只写属性");checkExecute=new QCheckBox("执行权限");buttonGetFileAttributeInfo=new QPushButton("获取文件的全部数据信息");// 使用网格布局来组织标签和输入框QGridLayout *gl=new QGridLayout;gl->addWidget(labelFileName,0,0);gl->addWidget(lineFileName,0,1);gl->addWidget(buttonFileName,0,2);gl->addWidget(labelFileSize,1,0);gl->addWidget(lineFileSize,1,1);gl->addWidget(labelFileCreateTime,2,0);gl->addWidget(lineFileCreateTime,2,1);gl->addWidget(labelFileModifyTime,3,0);gl->addWidget(lineFileModifyTime,3,1);gl->addWidget(labelFileAccessTime,4,0);gl->addWidget(lineFileAccessTime,4,1);// 使用水平布局来组织标签和复选框QHBoxLayout *hbl1=new QHBoxLayout;hbl1->addWidget(labelFileAttribute);hbl1->addStretch();  // 添加拉伸,使布局更灵活QHBoxLayout *hbl2=new QHBoxLayout;hbl2->addWidget(checkFile);hbl2->addWidget(checkHide);hbl2->addWidget(checkReadable);hbl2->addWidget(checkWritable);hbl2->addWidget(checkExecute);  // 添加一个水平布局来组织复选框QHBoxLayout *hbl3=new QHBoxLayout;  // 创建另一个水平布局来组织按钮和其他控件hbl3->addWidget(buttonGetFileAttributeInfo);  // 添加一个按钮到水平布局中QVBoxLayout *vbl=new QVBoxLayout(this);  // 创建一个垂直布局来组织所有控件和布局vbl->addLayout(gl);  // 将网格布局添加到垂直布局中vbl->addLayout(hbl1);  // 将水平布局添加到垂直布局中,其中包含标签和复选框的顶部部分vbl->addLayout(hbl2);  // 将包含复选框的水平布局添加到垂直布局中vbl->addLayout(hbl3);  // 将包含按钮的水平布局添加到垂直布局中,作为对话框的底部控件部分// 连接按钮的点击事件到相应的槽函数,用于获取文件路径和名称以及文件属性信息。这些槽函数将在Dialog类中定义。connect(buttonFileName,&QPushButton::clicked,this,&Dialog::getFilePathAndName);connect(buttonGetFileAttributeInfo,&QPushButton::clicked,this,&Dialog::getFileAttributeInfo);}Dialog::~Dialog()
{delete ui;
}// 函数:获取文件路径和名称
void Dialog::getFilePathAndName()
{// 创建一个QString变量,用于存储文件路径和名称QString filePathName;// 打开文件选择对话框,让用户选择文件// 'this'代表当前的对话框对象// "打开文件对话框"是对话框的标题// 初始目录为'/'// 文件过滤器只显示文件,不显示目录filePathName = QFileDialog::getOpenFileName(this,"打开文件对话框","/","files(*)");// 将选择的文件路径和名称显示在lineFileName文本框中lineFileName->setText(filePathName);
}// 函数:获取文件属性信息
void Dialog::getFileAttributeInfo()
{// 从lineFileName文本框中获取文件路径和名称QString strFile = lineFileName->text();// 使用QFileInfo对象来获取文件的属性信息QFileInfo qfi(strFile);// 获取文件大小,并转换为qint64类型qint64 fileSize = qfi.size();// 获取文件的创建时间、修改时间和访问时间QDateTime createTime = qfi.created();QDateTime modifyTime = qfi.lastModified();QDateTime accessTime = qfi.lastRead();// 判断是否为文件、是否隐藏、是否可读、是否可写、是否可执行bool file = qfi.isFile();bool hide = qfi.isHidden();bool read = qfi.isReadable();bool write = qfi.isWritable();bool execute = qfi.isExecutable();// 将文件大小、创建时间、修改时间和访问时间显示在对应的文本框中lineFileSize->setText(QString::number(fileSize));lineFileCreateTime->setText(createTime.toString());lineFileModifyTime->setText(modifyTime.toString());lineFileAccessTime->setText(accessTime.toString());// 根据文件属性,设置对应的复选框状态checkFile->setCheckState(file ? Qt::Checked : Qt::Unchecked);checkHide->setCheckState(hide ? Qt::Checked : Qt::Unchecked);checkReadable->setCheckState(read ? Qt::Checked : Qt::Unchecked);checkWritable->setCheckState(write ? Qt::Checked : Qt::Unchecked);checkExecute->setCheckState(execute ? Qt::Checked : Qt::Unchecked);
}

这段代码是用C++编写的,使用了Qt库来创建一个对话框(Dialog)界面。

  1. #include "dialog.h" 和 #include "ui_dialog.h":这两行代码分别包含了dialog.hui_dialog.h头文件。这些头文件可能包含了Dialog类和Ui::Dialog类的定义。
  2. Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ... }:这是Dialog类的构造函数,它初始化了一个对话框。构造函数中,ui->setupUi(this); 调用Ui::Dialog类中的setupUi方法来设置对话框的布局和控件。
  3. resize(500,300);:这行代码将对话框的大小设置为500x300像素。
  4. 接下来,代码创建了一系列标签(QLabel)和编辑框(QLineEdit)以及按钮(QPushButton)来收集文件信息。
  5. QGridLayout *gl=new QGridLayout;:创建一个网格布局(QGridLayout),用于在对话框中排列控件。
  6. QVBoxLayout *vbl=new QVBoxLayout(this);:创建一个垂直布局(QVBoxLayout),将其他布局和控件添加到这个布局中。
  7. connect(buttonFileName,&QPushButton::clicked,this,&Dialog::getFilePathAndName); 和 connect(buttonGetFileAttributeInfo,&QPushButton::clicked,this,&Dialog::getFileAttributeInfo);:这两行代码分别连接了"打开文件.."按钮和"获取文件的全部数据信息"按钮的点击事件到对应的槽函数。
  8. getFilePathAndName() 和 getFileAttributeInfo():这两个函数分别用于获取文件路径和名称以及获取文件属性信息。
  9. ~Dialog():这是Dialog类的析构函数,用于释放创建的控件和布局对象。

整体而言,这段代码实现了一个简单的文件对话框,可以打开文件并获取其属性信息。

QFileDialog::getOpenFileName

getOpenFileName 是 Qt 框架中的一个函数,用于打开一个文件选择对话框,让用户选择一个文件。

getOpenFileName(this,"打开文件对话框","/","files(*)") 函数调用的参数解释如下:

  1. this: 通常是指当前的对象或窗口。在这里,它表示当前对话框或窗口。
  2. "打开文件对话框": 这是对话框的标题。
  3. `"/": 这是默认的起始目录。在这个例子中,它设置为根目录("/")。
  4. "files(*): 这是一个过滤器字符串。在这里,它表示只显示文件,不显示目录。* 表示匹配所有文件。

所以,这个函数调用会打开一个文件选择对话框,标题为“打开文件对话框”,起始目录为根目录,并且只显示文件,不显示目录。用户选择文件后,文件的路径和名称会被返回。

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

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

相关文章

算法模板之双链表图文详解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️使用数组模拟双链表讲解1.1 &#x1f514;为什么我们要使用数组去模拟双链表…

使用java调用python批处理将pdf转为图片

你可以使用Java中的ProcessBuilder来调用Python脚本&#xff0c;并将PDF转换为图片。以下是一个简单的Java代码示例&#xff0c;假设你的Python脚本名为pdf2img.py&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

Java数组(2)

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

Kotlin 笔记 -- Kotlin 语言特性的理解(二)

都是编译成字节码&#xff0c;为什么 Kotlin 能支持 Java 中没有的特性&#xff1f; kotlin 有哪些 Java 中没有的特性&#xff1a; 类型推断、可变性、可空性自动拆装箱、泛型数组高阶函数、DSL顶层函数、扩展函数、内联函数伴生对象、数据类、密封类、单例类接口代理、inter…

西蒙子S7协议介绍

西门子的S7 协议&#xff0c;没有仍何关于S7协议的官方文档&#xff0c;是一个不透明的协议。关于S7的协议介绍&#xff0c;大都是非官方的一些七零八落的文档。 1. S7的通信模型 西蒙子S7 通讯遵从着基于TCP 的 Master&#xff08;client&#xff09; & Slave&#xff0…

读取小数部分

1.题目描述 2.题目分析 //假设字符串为 char arr[] "123.4500"; 1. 找到小数点位置和末尾位置 代码如下&#xff1a; char* start strchr(arr, .);//找到小数点位置char* end start strlen(start) - 1;//找到末尾位置 如果有不知道strchr()用法的同学&#xf…

Linux 基本语句_16_Udp网络聊天室

代码&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdlib.h> #include <unistd.h> #include <string…

中小型企业网络综合实战案例分享

实验背景 某公司总部在厦门&#xff0c;北京、上海都有分部&#xff0c;网络结构如图所示&#xff1a; 一、网络连接描述&#xff1a; 厦门总部&#xff1a;内部网络使用SW1、SW2、SW3三台交换机&#xff0c;SW1为作为核心交换机&#xff0c;SW2、SW3作为接入层交换机&#x…

PDF控件Spire.PDF for .NET【转换】演示:将多个图像转换为单个 PDF

如果您想要将多个图像合并为一个文件以便于分发或存储&#xff0c;将它们转换为单个 PDF 文档是一个很好的解决方案。这一过程不仅节省空间&#xff0c;还确保所有图像都保存在一个文件中&#xff0c;方便共享或传输。在本文中&#xff0c;您将学习如何使用Spire.PDF for .NET …

-bash: docker-compose: 未找到命令

-bash: docker-compose: 未找到命令 我在使用Docker搭建Nacos容器时遇到了这个问题&#xff1a;是没有安装 docker-compose工具 。 docker-compose的用处主要体现在以下几个方面&#xff1a; 快速搭建开发环境&#xff1a;使用docker-compose可以快速搭建起开发环境&#xff0…

一分钟轻松制作AI数字人播报视频

随着人工智能的快速发展&#xff0c;AI数字人播报成为了媒体和信息传播领域的一项创新技术。AI数字人播报是利用人工智能技术创建的一系列短视频&#xff0c;以新闻主播为中心&#xff0c;展示各种场景和情境能够以短视频的形式进行新闻的报道。这种创新的内容形式在社交媒体和…

Java刷题篇——单链表练习题上

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 1. 题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例1 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例2 输入&#xff1a;head [1,2] 输出&…

Spring Boot 3 + Vue 3 整合 WebSocket (STOMP协议) 实现广播和点对点实时消息

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

高可用接入层技术演化及集群概述

集群概述 集群的介绍及优势 集群&#xff1a;将多台服务器通过硬件或软件的方式组合起来&#xff0c;完成特定的任务&#xff0c;而这些服务器对外表现为一个整体。集群的优势 高可靠性&#xff1a;利用集群管理软件&#xff0c;当主服务器故障时&#xff0c;备份服务器能够自…

2023年国赛高教杯数学建模D题圈养湖羊的空间利用率解题全过程文档及程序

2023年国赛高教杯数学建模 D题 圈养湖羊的空间利用率 原题再现 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养&#xff0c;适应不同种类、不同阶段的牲畜对空间的不同要求&#xff0c;以保障牲畜安全和健康&#xff1b;与此同时&#xff0c;也要尽量减少空间闲置所…

代码随想录算法训练营第五十五天 _ 动态规划_392. 判断子序列、115.不同的子序列。

学习目标&#xff1a; 动态规划五部曲&#xff1a; ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录&#xff01; 60天训练营打卡计划&#xff01; 学习内容&#xff1a; 392. 判断子序列 这个题目就是 …

消息队列kafka详解:Kafka原理分析总结

一、概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统&#xff0c;后成为Apache的一部分&#xff0c;它使用Scala编写&#xff0c;以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持与Kafka集成。 Kaf…

SGPIO介紹

什么是SGPIO&#xff1f; Serial General Purpose Input Output (SGPIO) is a method to serialize general purpose IO signals. SGPIO defines the communication between an initiator (e.g. a host bus adapter) and a target (e.g. a backplaneholding disk drives). The …

最小窗口子串算法题——Java解答

题目&#xff1a;最小窗口子串 题目描述&#xff1a; 给你一个字符串 s 和一个字符串 t&#xff0c;返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 ""。 注意&#xff1a; 对于 t 中重复的字符&#xff…

Axure的交互与情形,事件,动作

交互样式 交互样式是指当用户与原型进行交互时&#xff0c;元素所呈现出的视觉效果。在Axure中&#xff0c;可以通过设置交互样式来调整元素在交互过程中的外观&#xff0c;例如改变颜色、大小、位置等。 交互事件 交互事件是指在用户与原型进行交互时触发的动作。在Axure中&…