• 【代码片段】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. 文件大小相同则分段读取,判断是否不通,如果读取段相同则继续读取
  • 相关阅读:
    Jenkins 搭建篇
    gitlab搭建使用
    apiDoc部署搭建
    传统切图
    Web前端性能优化的9大问题
    photoshop cc 智能切图
    ps切图
    前端ps切图,图文教程,详细。
    axios
    数组API
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/16717084.html
Copyright © 2020-2023  润新知