【代码片段】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() << "打开文件失败";
}
}
第三种
第三种是采样获取
- 首先判断文件大小是否相同
- 文件大小相同则分段读取,判断是否不通,如果读取段相同则继续读取
博 主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/16717084.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
地 址 :https://www.cnblogs.com/xiaqiuchu/p/16717084.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义