一、说明
客户端软件增量更新策略,涉及到单个文件的比对。以递归的方式,为每个文件创建md5
二、代码
#include "createmd5file.h"
#include "ui_createmd5file.h"
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonDocument>
#include <QFile>
#include <QFileInfo>
#include <QFileInfoList>
#include <QCryptographicHash>
#include <QDir>
createMd5file::createMd5file(QWidget *parent) :
QWidget(parent),
ui(new Ui::createMd5file)
{
ui->setupUi(this);
show();
QFile file(QCoreApplication::applicationDirPath() + "/md5");
if(!file.open(QIODevice::WriteOnly))
return;
QJsonObject obj;
readDir(obj,"D:/KuGou","root");
file.write(QJsonDocument(obj).toJson());
file.flush();
file.close();
}
createMd5file::~createMd5file()
{
delete ui;
}
void createMd5file::readDir(QJsonObject &json, QString dirName,QString parentName)
{
QDir dir(dirName);
QFileInfoList list = dir.entryInfoList();
foreach(QFileInfo info,list)
{
if(info.isSymLink() || (info.fileName() == ".") || (info.fileName() == "..") )
continue;
if(info.isDir())
{
readDir(json,info.absoluteFilePath(),parentName + "$" + info.fileName());
}
else if(info.isFile())
{
QFile theFile(info.absoluteFilePath());
theFile.open(QIODevice::ReadOnly);
QByteArray ba = QCryptographicHash::hash(theFile.readAll(), QCryptographicHash::Md5);
theFile.close();
json.insert(parentName+"$"+info.fileName(),QString(ba.toHex().constData()));
}
}
}
三、效果图