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

发布时间:2023年12月18日

二十九、获取文件属性及相关信息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_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    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(*): 这是一个过滤器字符串。在这里,它表示只显示文件,不显示目录。*?表示匹配所有文件。

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

文章来源:https://blog.csdn.net/qq_67755192/article/details/135059688
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。