9.4 获取文件信息

9.4 获取文件信息

  我们前面介绍了如何使用Qt的QDir来完成对目录的一些常用的操作,接下来我们将重心放到文件上来,在Qt中,也有用于对文件进行处理的相关的类,这个类就叫QFileInfo,这个类提供了很多与文件信息的一些操作,我们可以通过这些操作来完成项目中的一些小的需求。

  案例(利用QFileInfo来获取文件信息)

   (1)建立一个Qt的GUI应用程序,之后项目名称命名为FileInfo,类名命名为FileInfo,基类选择QDialog。

  (2)在fileinfo.h中添加以下这些成员。完成对界面所需要的元素的基本的构成。

#ifndef FILEINFO_H
#define FILEINFO_H

#include <QDialog>
#include <QFileInfo>
#include <QFileDialog>
#include <QMessageBox>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QCheckBox>
#include <QDateTime>
#include <QGridLayout>
class FileInfo : public QDialog
{
    Q_OBJECT

public:
    FileInfo(QWidget *parent = nullptr);
    ~FileInfo();
private slots:
    void slotOpenFile();
    void slotGetFileInfo();
private:
    QLabel*m_fileNameLabel;//文件名Label
    QLineEdit*m_fileNameLineEdit;//文件路径
    QPushButton*m_openFilePushButton;//打开文件

    QLabel*m_fileSizeLabel;//文件大小Label
    QLineEdit*m_fileSizeLineEdit;//文件大小

    QLabel*m_createTimeLabel;//创建时间Label
    QLineEdit*m_createTimeLineEdit;//创建时间

    QLabel*m_lastModifyTimeLabel;//最后修改时间Label
    QLineEdit*m_lastModifyTineLineEidit;//最后修改时间

    QLabel*m_lastAccessTimeLabel;//最后访问时间Label
    QLineEdit*m_lastAccessTimeLineEdit;//最后访问时间

    QLabel*m_attributeLabel;//属性Label;
    QCheckBox*m_dirCheckBox;//目录
    QCheckBox*m_fileCheckBox;//文件
    QCheckBox*m_symbolLink;//符号链接
    QCheckBox*m_hide;//隐藏
    QCheckBox*m_read;//读
    QCheckBox*m_write;//写
    QCheckBox*m_execute;//执行

    QPushButton*m_getFileInfoPushButton;//获得文件信息按钮
private:
    QGridLayout*m_mainLayout;//主布局
    QHBoxLayout*m_checkBoxLayout;//复选框Layout
private:
    QString m_fileName;

};
#endif // FILEINFO_H

  (3)在fileinfo.cpp中添加这些成员的实现,并编写相应的获取文件信息的逻辑

#include "fileinfo.h"
FileInfo::FileInfo(QWidget *parent):QDialog(parent)
{
    m_mainLayout = new QGridLayout(this);
    m_checkBoxLayout = new QHBoxLayout;

    m_fileNameLabel = new QLabel(QString("文件名:"));
    m_fileNameLineEdit = new QLineEdit;
    m_fileNameLineEdit->setReadOnly(true);
    m_openFilePushButton = new QPushButton(QString("打开文件"));
    m_mainLayout->addWidget(m_fileNameLabel,0,0);
    m_mainLayout->addWidget(m_fileNameLineEdit,0,1);
    m_mainLayout->addWidget(m_openFilePushButton,0,2);

    m_fileSizeLabel = new QLabel(QString("大小:"));
    m_fileSizeLineEdit = new QLineEdit;
    m_fileSizeLineEdit->setReadOnly(true);
    m_mainLayout->addWidget(m_fileSizeLabel,1,0);
    m_mainLayout->addWidget(m_fileSizeLineEdit,1,1,1,2);

    m_createTimeLabel = new QLabel(QString("创建时间:"));
    m_createTimeLineEdit = new QLineEdit;
    m_createTimeLineEdit->setReadOnly(true);
    m_mainLayout->addWidget(m_createTimeLabel,2,0);
    m_mainLayout->addWidget(m_createTimeLineEdit,2,1,1,2);

    m_lastModifyTimeLabel = new QLabel(QString("最后修改时间:"));
    m_lastModifyTineLineEidit = new QLineEdit;
    m_lastModifyTineLineEidit->setReadOnly(true);
    m_mainLayout->addWidget(m_lastModifyTimeLabel,3,0);
    m_mainLayout->addWidget(m_lastModifyTineLineEidit,3,1,1,2);

    m_lastAccessTimeLabel = new QLabel(QString("最后访问时间:"));
    m_lastAccessTimeLineEdit = new QLineEdit;
    m_lastAccessTimeLineEdit->setReadOnly(true);
    m_mainLayout->addWidget(m_lastAccessTimeLabel,4,0);
    m_mainLayout->addWidget(m_lastAccessTimeLineEdit,4,1,1,2);

    m_attributeLabel = new QLabel(QString("属性:"));
    m_mainLayout->addWidget(m_attributeLabel,5,0,1,2);

    m_dirCheckBox = new QCheckBox(QString("目录"));
    m_fileCheckBox = new QCheckBox(QString("文件"));
    m_symbolLink = new QCheckBox(QString("符号链接"));
    m_hide = new QCheckBox(QString("隐藏"));
    m_read = new QCheckBox(QString("读"));
    m_write = new QCheckBox(QString("写"));
    m_execute = new QCheckBox(QString("执行"));
    m_dirCheckBox->setDisabled(true);
    m_fileCheckBox->setDisabled(true);
    m_symbolLink->setDisabled(true);
    m_hide->setDisabled(true);
    m_read->setDisabled(true);
    m_write->setDisabled(true);
    m_execute->setDisabled(true);


    m_checkBoxLayout->addWidget(m_dirCheckBox);
    m_checkBoxLayout->addWidget(m_fileCheckBox);
    m_checkBoxLayout->addWidget(m_symbolLink);
    m_checkBoxLayout->addWidget(m_hide);
    m_checkBoxLayout->addWidget(m_read);
    m_checkBoxLayout->addWidget(m_write);
    m_checkBoxLayout->addWidget(m_execute);
    m_mainLayout->addLayout(m_checkBoxLayout,6,0,1,4);

    m_getFileInfoPushButton = new QPushButton(QString("获取文件信息"));
    m_mainLayout->addWidget(m_getFileInfoPushButton,7,0,1,4);


    connect(this->m_openFilePushButton,&QPushButton::clicked,this,&FileInfo::slotOpenFile);
    connect(this->m_getFileInfoPushButton,&QPushButton::clicked,this,&FileInfo::slotGetFileInfo);
}

FileInfo::~FileInfo()
{
}

void FileInfo::slotOpenFile()
{
    m_fileName = QFileDialog::getOpenFileName(this,"打开文件","./");
    this->m_fileNameLineEdit->setText(m_fileName);
}

void FileInfo::slotGetFileInfo()
{
    if(m_fileName.isEmpty())
    {
        QMessageBox::warning(this,QString("提示"),QString("未选择任何文件!"));
    }
    else
    {
        QFileInfo info(m_fileName);
        m_fileSizeLineEdit->setText(QString("%1 字节").arg(info.size()));
        m_createTimeLineEdit->setText(info.created().toString());
        m_lastModifyTineLineEidit->setText(info.lastModified().toString());
        m_lastAccessTimeLineEdit->setText(info.lastRead().toString());

        m_dirCheckBox->setChecked(info.isDir());
        m_fileCheckBox->setChecked(info.isFile());
        m_symbolLink->setChecked(info.isSymLink());
        m_hide->setChecked(info.isHidden());
        m_read->setChecked(info.isReadable());
        m_write->setChecked(info.isWritable());
        m_execute->setChecked(info.isExecutable());

        m_dirCheckBox->setDisabled(true);
        m_fileCheckBox->setDisabled(true);
        m_symbolLink->setDisabled(true);
        m_hide->setDisabled(true);
        m_read->setDisabled(true);
        m_write->setDisabled(true);
        m_execute->setDisabled(true);
    }
}

  (4)运行程序

  另外,在QFileInfo中还有很多的成员,以下通过一个例子做一个总结:

#include <QApplication>
#include <QDebug>
#include <QDateTime>
#include <QFileDialog>
#include <QFileInfo>
int main(int argc, char *argv[])
{
    QApplication theApp(argc, argv);
    QString fileName = QFileDialog::getOpenFileName(nullptr,QString("打开文件"),QString("./"));
    if(fileName.isEmpty())
    {
        qDebug() << "未打开任何文件!";
    }
    else
    {
        //1.QFileInfo的几个构造器
        /*
         * QFileInfo(const QFileInfo &fileinfo)//Copy Constructor
         * QFileInfo(const QDir &dir, const QString &file)//From In Any Dir File Constructor
         * QFileInfo(const QFile &file) //From QFile Object Constructor
         * QFileInfo(const QString &file) // From QString Constructor
         * QFileInfo() //Empty Constructor
        */
        QFileInfo info(fileName);
        //2.QDir QFileInfo::absoluteDir() const
        {
            qDebug() << "----QDir QFileInfo::absoluteDir() const----";
            //该函数会返回所打开的文件的绝对路径(这个路径是不包括文件名本身的哦!)
            qDebug() << info.absoluteDir();
            qDebug() << "----END QDir QFileInfo::absoluteDir() const----";
        }
        //3.QString QFileInfo::absoluteFilePath() const
        {
            qDebug() << "----QString QFileInfo::absoluteFilePath() const----";
            //该函数会以字符串的方式返回文件所在的绝对路径(注意,这个路径包含了文件名)
            qDebug() << info.absoluteFilePath();
            qDebug() << "----END QString QFileInfo::absoluteFilePath() const----";
        }
        //4.QString QFileInfo::absolutePath() const
        {
            qDebug() << "----QString QFileInfo::absolutePath() const----";
            //该函数会以字符串的方式返回文件所在的目录路径(不包括文件名)
            qDebug() << info.absolutePath();
            qDebug() << "----END QString QFileInfo::absolutePath() const----";
        }
        //5.QString QFileInfo::baseName() const
        {
            qDebug() << "----QString QFileInfo::baseName() const----";
            //该函数会返回文件的文件名称,比如/usr/local/Demo.MP4,那么就会返回Demo
            //假如名字叫XXX.tar.gz 那么返回的名称是XXX
            qDebug() << info.baseName();
            qDebug() << "----END QString QFileInfo::baseName() const----";
        }
        //6.QDateTime QFileInfo::birthTime() const
        {
            qDebug() << "----QDateTime QFileInfo::birthTime() const----";
            //返回文件被初次创建的时间
            qDebug() << info.birthTime().toString();
            qDebug() << "----END QDateTime QFileInfo::birthTime() const----";
        }
        //7.QString QFileInfo::bundleName() const
        {
            qDebug() << "----QString QFileInfo::bundleName() const----";
            //返回文件的包名称
            //实际上这个包名称的概念是在MacOS系统中的软件上,我们知道,Mac系统重的Applications目录中的文件看似是一个图标,实则它是一个包,可以理解为一种特殊的文件夹,这种包文件已.app为后缀结尾
            QFileInfo fileInfo("/Applications/Safari.app");
            qDebug() << fileInfo.bundleName();
            qDebug() << "----END QString QFileInfo::bundleName() const----";
        }
        //8.bool QFileInfo::caching() const
        //void QFileInfo::setCaching(bool enable)
        {
            qDebug() << "----bool QFileInfo::caching() const;void QFileInfo::setCaching(bool enable)----";
            //返回是否启用了文件的缓存信息
            //设置是否要启用文件信息的缓存,这个实际上就是,如果设置为true,那么当第一次打开文件的信息时,当有其他应用程序修改了这个文件,那么QFileInfo不会对文件修改之后的信息进行刷新。默认情况下,缓存是启用的
            qDebug() << "caching():" << info.caching();
            info.setCaching(false);
            qDebug() << "----END bool QFileInfo::caching() const;void QFileInfo::setCaching(bool enable)----";
        }
        //9.void QFileInfo::setFile(const QString &file)
        {
            qDebug() << "----void QFileInfo::setFile(const QString &file)----";
            //该函数用于设置文件或目录(这里面如果直接写文件名称,那么就是相对路径,否则写绝对路径)
            QFileInfo info("/bin/ls");
            qDebug() << info;
            info.setFile("/bin/pwd");//设置文件
            qDebug() << info;
            info.setFile("/bin");//还可以设置目录
            qDebug() << info;
            qDebug() << "----END void QFileInfo::setFile(const QString &file)----";
        }
        //10.QString QFileInfo::canonicalFilePath() const
        //QString QFileInfo::canonicalPath() const
        {
            qDebug() << "----QString QFileInfo::canonicalFilePath() const----";
            //返回包含了文件名的规范的文件的路径(即不包含软链接或含有.或..的路径)
            //返回不包含文件名的规范的文件所在的目录
            qDebug() << info.canonicalFilePath();
            qDebug() << info.canonicalPath();
            qDebug() << "----END QString QFileInfo::canonicalFilePath() const----";
        }
        //11.QString QFileInfo::completeBaseName() const
        {
            //该函数用于获取不包含文件所在路径的文件的全部的名称,比如/usr/bin/Demo.MP4就会返回Demo.MP4
            //但如果文件名含有两个及以上的.的话,那么第二个.之后的名称会被忽略,比如XXX.tar.gz就会是XXX.tar
            qDebug() << info.completeBaseName();
        }
        //12.QString QFileInfo::completeSuffix() const
        {
            //该函数会返回文件的后缀名,如果文件的后缀名叫XXX.tar.gz.kkk.mmm 那么返回的就是.tar.gz.kkk.mmm
            qDebug() << info.completeSuffix();
        }
        //13.QDir QFileInfo::dir() const
        {
            //该函数会返回最顶层的目录
            QFileInfo fileInfo("/usr/bin/ls");
            qDebug() << fileInfo.dir();// /usr/bin
        }
        //14.bool QFileInfo::exists() const
        //static bool QFileInfo::exists(const QString &file)
        {
            qDebug() << "----bool QFileInfo::exists() const;static bool QFileInfo::exists(const QString &file)----";
            //该函数用于判断文件或目录是否存在(成员方法)
            //静态方法来判断该命目录是否存在
            QFileInfo fileInfo("/Users/admin/Desktop");
            qDebug() << fileInfo.exists();
            fileInfo.setFile("/UserSSS");
            qDebug() << fileInfo.exists();
            qDebug() << "----END bool QFileInfo::exists() const;static bool QFileInfo::exists(const QString &file)----";
        }
        //15.QString QFileInfo::fileName() const
        {
            qDebug() << "----QString QFileInfo::fileName() const----";
            //该函数会返回文件的名称(包括了文件名和后缀但不包括文件就所在的路径)
            qDebug() << info.fileName();
            qDebug() << "----END QString QFileInfo::fileName() const----";
        }
        //16.QString QFileInfo::filePath() const
        {
            qDebug() << "----QString QFileInfo::filePath() const----";
            //该函数会返回文件所在的路径[不包括文件名称](可以是绝对路径,也可以是相对路径,这取决于QFileInfo中的makeAbsolute是否被设置了)
            info.makeAbsolute();
            qDebug() << "绝对路径:" << info.filePath();
            qDebug() << "----END QString QFileInfo::filePath() const----";
        }
        //17.QDateTime QFileInfo::fileTime(QFile::FileTime time) const
        {
            qDebug() << "----QDateTime QFileInfo::fileTime(QFile::FileTime time) const----";
            //该函数会根据传入的枚举来返回枚举所描述的文件的相关的时间
            qDebug() << "FileBirthTime:" << info.fileTime(QFile::FileTime::FileBirthTime).toString();
            qDebug() << "FileAccessTime:" << info.fileTime(QFile::FileTime::FileAccessTime).toString();
            qDebug() << "FileModificationTime:" << info.fileTime(QFile::FileTime::FileModificationTime).toString();
            qDebug() << "FileMetadataChangeTime:" << info.fileTime(QFile::FileTime::FileMetadataChangeTime).toString();
            qDebug() << "----END QDateTime QFileInfo::fileTime(QFile::FileTime time) const----";
            /*
                QFileDevice::FileAccessTime 文件最后一次被访问的时间(最后一次被读取或写入)
                QFileDevice::FileBirthTime 文件的创建的日期
                QFileDevice::FileMetadataChangeTime  上次更改文件元数据的时间
                QFileDevice::FileModificationTime 最近一次修改文件的时间
            */
        }
        //18.QString QFileInfo::group() const
        //uint QFileInfo::groupId() const
        //QString QFileInfo::owner() const
        //uint QFileInfo::ownerId() const
        {
            qDebug() << "----QString QFileInfo::group() const;uint QFileInfo::groupId() const;QString QFileInfo::owner() const;uint QFileInfo::ownerId() const----";
            //获取文件或目录的所在组的名称
            //获取文件或目录所在组的ID
            //获取文件或目录的拥有者的名称
            //获取文件或目录的拥有者的ID
            qDebug() << "group():" << info.group();
            qDebug() << "groupId():" << info.groupId();
            qDebug() << "owner():" << info.owner();
            qDebug() << "ownerId():" << info.ownerId();
            qDebug() << "----END QString QFileInfo::group() const;uint QFileInfo::groupId() const;QString QFileInfo::owner() const;uint QFileInfo::ownerId() const----";
        }
        //19.bool QFileInfo::isAbsolute() const
        //bool QFileInfo::isBundle() const
        //bool QFileInfo::isDir() const
        //bool QFileInfo::isExecutable() const
        //bool QFileInfo::isFile() const
        //bool QFileInfo::isHidden() const
        //bool QFileInfo::isNativePath() const
        //bool QFileInfo::isReadable() const
        //bool QFileInfo::isRelative() const
        //bool QFileInfo::isRoot() const
        //bool QFileInfo::isSymLink() const
        //bool QFileInfo::isWritable() const
        {
            qDebug() << "----File Attribute----";
            //判断当前的文件或目录是否使用的是绝对路径
            //判断当前的文件是否是包(这是MacOS的/Applications中的应用程序的那种包文件)
            //判断当前是不是目录
            //判断当前用户对的文件是否有可执行的权限
            //判断当前的文件是否是文件
            //判断当前的文件是否是带有隐藏属性
            //判断当前的路径是否是原生的路径(因为比如Qt的资源文件,它就是一种虚拟的路径而不是原原本本的那种路径)
            //判断当前用户对该文件是否有读权限
            //判断当前文件或目录的路径是否是相对路径
            //判断当前的路径或文件所在的路径是否是根路径
            //判断当前的文件是否是软链接(快捷方式)
            //判断当前用户对该目录或文件是否具有写权限
            qDebug() << "isAbsolute():" << info.isAbsolute();
            qDebug() << "isBundle():" << info.isBundle();
            qDebug() << "isDir():" << info.isDir();
            qDebug() << "isExecutable():" << info.isExecutable();
            qDebug() << "isFile():" << info.isFile();
            qDebug() << "isHidden():" << info.isHidden();
            qDebug() << "isNativePath():" << info.isNativePath();
            qDebug() << "isRelative():" << info.isRelative();
            qDebug() << "isReadable():" << info.isReadable();
            qDebug() << "isRoot():" << info.isRoot();
            qDebug() << "isSymLink():" << info.isSymLink();
            qDebug() << "isWritable():" << info.isWritable();
            qDebug() << "----END File Attribute----";
        }
        //20.QDateTime QFileInfo::lastModified() const
        //QDateTime QFileInfo::lastRead() const
        //QDateTime QFileInfo::metadataChangeTime() const
        //QDateTime QFileInfo::birthTime() const
        {
            qDebug() << "----QDateTime QFileInfo::lastModified() const;QDateTime QFileInfo::lastRead() const;QDateTime QFileInfo::metadataChangeTime() const;QDateTime QFileInfo::birthTime() const----";
            //获取文件最后一次被修改的时间
            //获取文件最后一次被读取的时间
            //获取最近一次文件的元数据被修改的时间
            //获取文件第一次被创建时的时间
            qDebug() << "lastModified():" << info.lastModified().toString();
            qDebug() << "lastRead():" << info.lastRead().toString();
            qDebug() << "metadataChangeTime():" << info.metadataChangeTime().toString();
            qDebug() << "birthTime():" << info.birthTime().toString();
            qDebug() << "----END QDateTime QFileInfo::lastModified() const;QDateTime QFileInfo::lastRead() const;QDateTime QFileInfo::metadataChangeTime() const;QDateTime QFileInfo::birthTime() const----";
        }
        //21.bool QFileInfo::makeAbsolute()
        {
            qDebug() << "----bool QFileInfo::makeAbsolute()----";
            //该函数是用在如果当前的路径不是绝对路径,则将该路径转换为绝对路径,并返回true。若已经是绝对路径,则返回false,则表示已经是绝对路径了。不需要再做转换
            if(info.isAbsolute())
            {
                qDebug() << "Aready Is Absolute Path";
            }
            else
            {
                qDebug() << info.makeAbsolute();
            }
            qDebug() << "----END bool QFileInfo::makeAbsolute()----";
        }
        //22.bool QFileInfo::permission(QFile::Permissions permissions) const
        {
            qDebug() << "----bool QFileInfo::permission(QFile::Permissions permissions) const----";
            //该函数用于测试用户对文件或目录是否有相应的权限
            //可以测试以下的权限
            /*
                QFileDevice::ReadOwner //文件拥有者是否可读
                QFileDevice::WriteOwner //文件的拥有者是否可写
                QFileDevice::ExeOwner //文件的拥有者是否可执行
                QFileDevice::ReadUser //文件的用户是否可读
                QFileDevice::WriteUser //文件的用户是否可写
                QFileDevice::ExeUser //文件的用户是否可执行
                QFileDevice::ReadGroup //和用户同组的用户是否可读
                QFileDevice::WriteGroup //和用户同组的用户是否可写
                QFileDevice::ExeGroup //和用户同组的用户是否可执行
                QFileDevice::ReadOther //其他用户是否可读
                QFileDevice::WriteOther //其他用户是否可写
                QFileDevice::ExeOther //其他用户是否可执行
            */
            qDebug() << QString("%1%2%3%4%5%6%7%8%9").arg(info.permission(QFile::Permission::ReadOwner)?'r':'-').arg(info.permission(QFile::Permission::WriteOwner)?'w':'-').arg(info.permission(QFile::Permission::ExeOwner)?'x':'-').arg(info.permission(QFile::Permission::ReadGroup)?'r':'-').arg(info.permission(QFile::Permission::WriteGroup)?'w':'-').arg(info.permission(QFile::Permission::ExeGroup)?'x':'-').arg(info.permission(QFile::Permission::ReadOther)?'r':'-').arg(info.permission(QFile::Permission::WriteOther)?'w':'-').arg(info.permission(QFile::ExeOther)?'x':'-');
            qDebug() << "----END bool QFileInfo::permission(QFile::Permissions permissions) const----";
            //当然,我们还可以通过|运算符来连接多个不同的权限来进行测试
        }
        //23.QFile::Permissions QFileInfo::permissions() const
        {
            qDebug() << "----QFile::Permissions QFileInfo::permissions() const----";
            //这个函数会返回一个组合过的权限,然后我们可以通过返回的结果与需要判断的权限的枚举进行&操作来得到是否有这个权限
            QFile::Permissions permissons = info.permissions();
            if(permissons.testFlag(QFile::Permission::ReadOwner))
            {
                qDebug() << "OwnerRead";
            }
            if(permissons&QFile::Permission::WriteOwner)
            {
                qDebug() << "OwnerWrite";
            }
            if(permissons.operator&(QFile::Permission::ExeOwner))
            {
                qDebug() << "OwnerExec";
            }
            qDebug() << "----END QFile::Permissions QFileInfo::permissions() const----";
        }
        //24.void QFileInfo::refresh()
        {
            //该函数用于刷新一次文件的信息,这经常被使用在如果文件被其他的进程所修改,你们我这个程序里面需要更新文件的信息时,就可以调用这个函数
            info.refresh();
            qDebug() << info;
        }
        //25.qint64 QFileInfo::size() const
        {
            //该函数会得到文件的大小
            qDebug() << info.size();
        }
        //26.QString QFileInfo::suffix() const
        {
            //返回文件的后缀(不包括.并且是最后的后缀)
            qDebug() << info.suffix();
        }
        //27.void QFileInfo::swap(QFileInfo &other)
        {
            //该函数用于快速交换两个文件的信息
            QFileInfo fileInfo;
            fileInfo.swap(info);
        }
        //28.QString QFileInfo::symLinkTarget() const
        {
            //如果文件是一个软链接,则会得到该软链接所指向的目标的路径
            qDebug() << info.symLinkTarget();
        }
        //29.bool QFileInfo::operator==(const QFileInfo &fileinfo) const
        {
            //如果两个QFileInfo指向同一个文件(目录也要相同,哪怕是同一个文件在不同的目录也会返回false),否则返回true
            QFileInfo info1("/bin/ls");
            QFileInfo info2("/Users/admin/Desktop/ls");
            qDebug() << info1.operator==(info2);
        }
    }
    return theApp.exec();
}

  本节代码:https://files.cnblogs.com/files/blogs/792763/FileInfo.zip?t=1720191408&download=true

         https://files.cnblogs.com/files/blogs/792763/QFileInfoDemo.zip?t=1720209215&download=true        

posted @ 2024-07-05 22:57  蜡笔小新Pointer  阅读(35)  评论(0)    收藏  举报