方法源代码如下:
QString fileMd5(const QString &sourceFilePath) {
QFile sourceFile(sourceFilePath);
qint64 fileSize = sourceFile.size();
const qint64 bufferSize = 10240;
if (sourceFile.open(QIODevice::ReadOnly)) {
char buffer[bufferSize];
int bytesRead;
int readSize = qMin(fileSize, bufferSize);
QCryptographicHash hash(QCryptographicHash::Md5);
while (readSize > 0 && (bytesRead = sourceFile.read(buffer, readSize)) > 0) {
fileSize -= bytesRead;
hash.addData(buffer, bytesRead);
readSize = qMin(fileSize, bufferSize);
}
sourceFile.close();
return QString(hash.result().toHex());
}
return QString();
}
包含测试的完整代码如下:
#include <QCoreApplication>
#include <QCryptographicHash>
#include <QFile>
#include <QDebug>
QString fileMd5(const QString &sourceFilePath) {
QFile sourceFile(sourceFilePath);
qint64 fileSize = sourceFile.size();
const qint64 bufferSize = 10240;
if (sourceFile.open(QIODevice::ReadOnly)) {
char buffer[bufferSize];
int bytesRead;
int readSize = qMin(fileSize, bufferSize);
QCryptographicHash hash(QCryptographicHash::Md5);
while (readSize > 0 && (bytesRead = sourceFile.read(buffer, readSize)) > 0) {
fileSize -= bytesRead;
hash.addData(buffer, bytesRead);
readSize = qMin(fileSize, bufferSize);
}
sourceFile.close();
return QString(hash.result().toHex());
}
return QString();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString md5("0e40d388359b41334831b898262cfe93"); // 使用 md5sum 命令获取
QString result = fileMd5("/home/toby/bin/Tools.zip");
qDebug() << "source MD5: " << md5;
qDebug() << "result MD5: " << result;
qDebug() << "is equal: " << (result == md5);
return a.exec();
}
使用 10.1 GB 超大文件的进行测试
测试结果如下:
本文参考链接:
http://www.qtcentre.org/threads/47635-Calculate-MD5-sum-of-a-big-file