• Qt5开发从入门到精通——第九篇五节( Qt5 文件及磁盘处理—— 获取文件信息)


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

    欢迎小伙伴的点评✨✨,相互学习c/c++应用开发。🍳🍳🍳
    博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀

    前言

    本章节会给大家带来Qt5 文件及磁盘处理—— 获取文件信息实例详解。

    一、获取文件信息概述

    QFilelnfo 类提供了对文件进行操作时获得的文件相关属性信息,包括文件名、文件大小、
    创建时间、最后修改时间、最后访问时间及一些文件是否为目录、文件或符号链接和读写属性
    等。
    注意:

    1. 文件的所有权限可以由 owner() 、 ownerld() 、 group() 、 groupld()等方法获得
    。测试一个文件的权限可以使用 Permission()方法 。
    2. 为了提高执行的效率, QFilelnfo 可以将文件信息进行一次读取缓存,这样后续的访问 就不需要持续访问文件了 。但是,由于文件在读取信息之后可能被其他程序或本程序改变属 性,所以 QFilelnfo 通过refresh()方法提供了一种可以更新文件信息的刷新机制,用户也可以 通过 setCachingQ方法关闭这种缓冲功能 。
    3. QFilelnfo 可以使用绝对路径和相对路径指向同一个文件 。 其中,绝对路径以“/”开 头(在 Windows中以磁盘符号开头),相对路径则以目录名或文件名开头, isRelative()方法可 以用来判断 QFilelnfo使用的是绝对路径还是相对路径 。 makeAbsolute()方法可以用来将 相对路径转化为绝对路径 。

    二、效果实例

    图一
    在这里插入图片描述

    三、原码解析

    fileinfo.h

    #ifndef FILEINFO_H
    #define FILEINFO_H
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    class FileInfo : public QDialog
    {
        Q_OBJECT
    
    public:
        FileInfo(QWidget *parent = 0);
        ~FileInfo();
    public slots:
    void slotFile();
    void slotGet();
    private:
        QLabel *fileNameLabel;
        QLineEdit *fileNameLineEdit;
        QPushButton *fileBtn;
        QLabel *sizeLabel;
        QLineEdit *sizeLineEdit;
        QLabel *createTimeLabel;
        QLineEdit*  createTimeLineEdit;
        QLabel *lastModifiedLabel;
        QLineEdit *lastModifiedLineEdit;
        QLabel *lastReadLabel;
        QLineEdit *lastReadLineEdit;
        QLabel *propertyLabel;
        QCheckBox *isDirCheckBox;
        QCheckBox *isFileCheckBox;
        QCheckBox *isSymLinkCheckBox;
        QCheckBox *isHiddenCheckBox;
        QCheckBox *isReadableCheckBox;
        QCheckBox *isWritableCheckBox;
        QCheckBox *isExecutableCheckBox;
        QPushButton *getBtn;
    };
    
    #endif // FILEINFO_H
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    fileinfo.cpp

    #include "fileinfo.h"
    
    FileInfo::FileInfo(QWidget *parent)
        : QDialog(parent)
    {
        fileNameLabel = new QLabel(tr("文件名:"));
        fileNameLineEdit = new QLineEdit;
        fileBtn = new QPushButton(tr("文件")) ;
        sizeLabel = new QLabel( tr("大小:"));
        sizeLineEdit = new QLineEdit;
    
        createTimeLabel = new QLabel(tr("创建时间:"));
        createTimeLineEdit = new QLineEdit;
        lastModifiedLabel = new QLabel(tr("最后修改时间:"));
        lastModifiedLineEdit = new QLineEdit;
        lastReadLabel = new QLabel(tr("最后访问时间: "));
        lastReadLineEdit = new QLineEdit;
        propertyLabel = new QLabel(tr("属性:")) ;
        isDirCheckBox = new QCheckBox(tr("目录")) ;
        isFileCheckBox = new QCheckBox(tr("文件")) ;
        isSymLinkCheckBox = new QCheckBox(tr("符号连接")) ;
        isHiddenCheckBox = new QCheckBox(tr("隐藏")) ;
        isReadableCheckBox = new QCheckBox(tr("读")) ;
        isWritableCheckBox = new QCheckBox(tr("写")) ;
        isExecutableCheckBox = new QCheckBox(tr("执行")) ;
        getBtn = new QPushButton(tr(" 获得文件信息"));
        QGridLayout *gridLayout = new QGridLayout;
        gridLayout->addWidget(fileNameLabel,0,0);
        gridLayout->addWidget(fileNameLineEdit,0,1);
        gridLayout->addWidget(fileBtn,0,2);
        gridLayout->addWidget(sizeLabel,1,0);
        gridLayout->addWidget(sizeLineEdit,1,1,1,2);
        gridLayout->addWidget(createTimeLabel,2,0);
        gridLayout->addWidget(createTimeLineEdit,2,1,1,2);
        gridLayout->addWidget(lastModifiedLabel,3,0);
        gridLayout->addWidget(lastModifiedLineEdit,3,1,1,2);
        gridLayout->addWidget(lastReadLabel,4,0);
        gridLayout->addWidget(lastReadLineEdit,4,1,1,2);
        QHBoxLayout *layout2 = new QHBoxLayout;
        layout2->addWidget(propertyLabel);
        layout2->addStretch();
        QHBoxLayout *layout3 = new QHBoxLayout;
        layout3->addWidget(isDirCheckBox);
        layout3->addWidget(isFileCheckBox);
        layout3->addWidget(isSymLinkCheckBox);
        layout3->addWidget(isHiddenCheckBox);
        layout3->addWidget (isReadableCheckBox) ;
        layout3->addWidget(isWritableCheckBox);
        layout3->addWidget(isExecutableCheckBox);
        QHBoxLayout *layout4 = new QHBoxLayout;
        layout4->addWidget(getBtn);
        QVBoxLayout *mainLayout = new QVBoxLayout(this);
        mainLayout->addLayout(gridLayout);
        mainLayout->addLayout(layout2);
        mainLayout->addLayout(layout3);
        mainLayout->addLayout(layout4);
        connect (fileBtn, SIGNAL (clicked()), this, SLOT (slotFile ()));
        connect (getBtn, SIGNAL (clicked()), this, SLOT (slotGet ()));
    }
    
    FileInfo::~FileInfo()
    {
    
    }
    /*槽函数 slotFile()完成通过标准文件对话框获得所需要文件的文件名功能*/
    void FileInfo::slotFile ()
    {
        QString fileName = QFileDialog::getOpenFileName (this," 打开","/", "files(*) ");
        fileNameLineEdit->setText(fileName);
    }
    /*槽函数 slotGet()通过 QFilelnfo 获得具体的文件信息*/
    void FileInfo::slotGet()
    {
        QString file = fileNameLineEdit->text ();
        QFileInfo info(file); //根据输入参数创建一个 QFiieinfo 对象
        qint64 size = info. size(); //获得 QFileinfo 对象的大小
        QDateTime created = info.created();   //获得 QFileinfo 对象的创建时间
        QDateTime lastModified = info.lastModified ();  //获得 QFileinfo 对象的最后修改时间
        QDateTime lastRead = info.lastRead ();  ///获得 QFileinfo 对象的最后访问时间
        /*判断 QFileinfo 对象的文件类型属性*/
        bool isDir = info.isDir(); //是否为目录
        bool isFile = info.isFile(); //是否为文件
        bool isSymLink = info.isSymLink(); /*判断 QFilelnfo 对象的文件类型属性,此处判断是
    否为符号连接。而 symLinkTarget()方法可进一步获得符号连接指向的文件名称。*/
        bool isHidden = info.isHidden(); //判断 QFileinfo 对象的隐藏属性
        bool isReadable = info.isReadable(); //判断 QFileinfo 对象的读属性
        bool isWritable = info.isWritable(); // 判断 QFileinfo 对象的写属性
        bool isExecutable = info.isExecutable();  //判断 QFileinfo 对象的可执行属性
        /*根据上面得到的结果更新界面显示*/
        sizeLineEdit->setText(QString::number(size));
        createTimeLineEdit->setText (created.toString ());
        lastModifiedLineEdit->setText (lastModified.toString ());
        lastReadLineEdit->setText(lastRead. toString());
        isDirCheckBox->setCheckState(isDir?Qt::Checked:Qt::Unchecked);
        isFileCheckBox->setCheckState(isFile?Qt::Checked:Qt::Unchecked);
        isSymLinkCheckBox->setCheckState(isSymLink?Qt::Checked:Qt::Unchecked);
        isHiddenCheckBox->setCheckState (isHidden?Qt::Checked:Qt::Unchecked);
        isReadableCheckBox->setCheckState(isReadable?Qt::Checked:Qt::Unchecked);
        isWritableCheckBox->setCheckState(isWritable?Qt::Checked:Qt::Unchecked);
        isExecutableCheckBox->setCheckState(isExecutable?Qt::Checked:Qt::Unchecked);
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103

    main.cpp

    #include "fileinfo.h"
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        FileInfo w;
        w.show();
    
        return a.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    四、总结

    Qt5 文件及磁盘处理—— 获取文件信息会在应用程序开发中经常用到的。

  • 相关阅读:
    Tornado 异步性能分析
    06-Zookeeper选举Leader源码剖析
    案例分享|金融业数据运营运维一体化建设
    了解Redis之命令操作
    最新水果FL Studio21.2中文汉化版本覆盖升级
    Pytorch在训练时冻结某些层使其不参与反向传播
    less 基础语法
    海尔智家:科技优秀是一种习惯
    Flutter页面滑动回调处理解决方法
    MAC和PHY的关系
  • 原文地址:https://blog.csdn.net/weixin_44759598/article/details/127128808