运用MD5文件查重
我们已经了解MD5是什么了。
我们可以运用MD5查找重复文件。
QByteArray Widget::getfileMD5(const QString &fileName)
{
QFile file(fileName);
if(file.open(QIODevice::ReadOnly))
{
QCryptographicHash hash(QCryptographicHash::Md5);
//按大小读取100M
while(!file.atEnd())
{
QByteArray content = file.read(100*1024*1024);
hash.addData(content);
}
QByteArray MD5 = hash.result();
//qDebug()<<"The MD5 of file is "<<MD5.toHex();
file.close();
return MD5;
}
else
{
return QByteArray();
}
}
QStringList files = getfile("C:/Users/DELL/Desktop/current study/testfilename");
for(int i = 0; i<files.count();i++)
{
QString fileName = files.at(i);
QByteArray md5 = getfileMD5(fileName);
//qDebug()<<"filename为"<<fileName <<"MD5的值为"<< md5.toHex();
fileMD5[md5].append(fileName);
//qDebug()<<filelist;
}
//遍历fileMD5
for(QHash<QByteArray,QStringList>::iterator it= fileMD5.begin();it!=fileMD5.end();it++)
{
qDebug()<<"MD5的值"<<(*it).first()<<"有多少个相同文件名count"<<it.value().count();
if(it.value().count()>1)
{
qDebug()<<it.value();
}
}
在遍历QHsh时,在QT中,这个就表示了键值对了,
QHash<QByteArray,QStringList> fileMD5;
在C++时,我们学过,<>中是2个类型,我们这个是QByteArray与QStringList两个类型。
在QT中可以直接it.key()与it.value();访问。