【代码片段】Qt6.2.4 获取文件 MD5

参考

环境

环境 版本
windows 10
QT 6.2.4
Qt Creator 8.0.1 (Community)
qmake

代码段

第一种

一次性读取文件内容获取文件 md5 (大文件可能内存不够)

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QString>
#include <QFile>
#include <QIODevice>
#include <QCryptographicHash>
#include <QByteArray>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    QString filePath = "C:/20220920163330.png";
    QFile file(filePath);
    if(file.open(QIODevice::ReadOnly)){
        qDebug() << "打开文件成功";
        QByteArray ba = QCryptographicHash::hash(file.readAll(), QCryptographicHash::Md5);
        qDebug() << ba.toHex();
        file.close();
    }else{
        qDebug() << "打开文件失败";
    }
}

第二种

分段读取文件内容获取文件 md5 (比较好的方法)

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QString>
#include <QFile>
#include <QIODevice>
#include <QCryptographicHash>
#include <QByteArray>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QFile file("C:/xxx.png");
    QCryptographicHash hash(QCryptographicHash::Md5);
    //
    if(file.open(QIODevice::ReadOnly)){
        qDebug() << "打开文件成功";
        while(!file.atEnd()){
            QByteArray content = file.read(100* 1024 * 1024);
            hash.addData(content);
        }
        QByteArray md5 = hash.result();
        //
        qDebug() << "MD5:" << md5 << " hex:" << md5.toHex();
        //
        file.close();
    }else{
        qDebug() << "打开文件失败";
    }
}

第三种

第三种是采样获取

  1. 首先判断文件大小是否相同
  2. 文件大小相同则分段读取,判断是否不通,如果读取段相同则继续读取
posted @ 2022-09-21 20:40  夏秋初  阅读(239)  评论(0编辑  收藏  举报