应用场景,获取一个目录下,包含子目录下,给定匹配文件类型的所有符合文件的MD5
完整代码如下:
#include <QDebug>
#include <QDir>
#include <QCryptographicHash>
#include <QDirIterator>
void getAllFiles(const QString& foldPath,QStringList &folds,const QStringList& formats) {
QDirIterator it(foldPath,QDir::Files | QDir::NoDotAndDotDot ,QDirIterator::Subdirectories);
while (it.hasNext()) {
it.next();
QFileInfo fileInfo = it.fileInfo();
if(formats.contains(fileInfo.suffix())) { //检测格式,按需保存
folds << fileInfo.absoluteFilePath();
}
}
}
void getmd5(QString filename)
{
QFile theFile(filename);
theFile.open(QIODevice::ReadOnly);
QByteArray ba = QCryptographicHash::hash(theFile.readAll(), QCryptographicHash::Md5);
theFile.close();
qDebug() << ba.toHex().constData();
}
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QString dirpath = "D:\\bakup";
QDir dir(dirpath);
QStringList nameFilters;
nameFilters << "*.*" << "*.flv";
QStringList folds;
QStringList fmt = QString("exe;com").split(';');
getAllFiles("d:\\bakup\\",folds,fmt);
qDebug() << folds;
for(int i = 0; i< folds.size(); ++i)
{
QString temp =folds.at(i);
qDebug() << "filename: " << temp;
getmd5(temp);
}
}