I.説明
インターネット企業のクライアントソフトウェアのアップグレードは、多くの場合に分けられます。
- 正常に(ソフトウェアのバージョン番号と判断します)
- インクリメンタルアップグレード
- 全額のアップグレード
- 必須のアップグレード
- 全額のアップグレード
- グレーアップグレード
グレー、ヒットの方針に従い1.クライアントをアップグレードするように要求しました
バージョン番号と値MD5のインストールパッケージのリリースファイルに基づいて判断をアップグレードします。
通常の状態では、裁判官は、ソフトウェアインフラストラクチャのバージョン番号を確認するための必須条件をアップグレード、ソフトウェアのバージョン番号である、またはアップグレードを構築するための更新やソフトウェアフレームワークの大規模なバージョンがある場合もございます。
インクリメンタルアップグレードダウンロードは唯一のMD5ファイルを置き換える変更
全量が書き換えダウンロードにインストールパッケージをアップグレードし、インストールプロセスが行く
2を、MD5を取得します
#ifndef FILEMD5INSTANCE_H
#define FILEMD5INSTANCE_H
#include <QObject>
#include <QMutex>
#include <QDir>
#include <QCryptographicHash>
#include <QFile>
#include <QDebug>
class FileMd5Instance : public QObject
{
Q_OBJECT
public:
explicit FileMd5Instance();
~FileMd5Instance();
static FileMd5Instance* instance();
void fileMd5(const QDir &dir);
void bigFileMd5(const QDir &dir);
private:
static QMutex *m_pmutex;
static FileMd5Instance *m_pinstacne;
};
#endif // FILEMD5INSTANCE_H
#include "filemd5instance.h"
QMutex *FileMd5Instance::m_pmutex = new QMutex;
FileMd5Instance *FileMd5Instance::m_pinstacne = nullptr;
FileMd5Instance::FileMd5Instance()
{
}
FileMd5Instance::~FileMd5Instance()
{
}
FileMd5Instance *FileMd5Instance::instance()
{
if(nullptr == m_pinstacne){
m_pmutex->lock();
if(nullptr == m_pinstacne){
m_pinstacne = new FileMd5Instance;
}
m_pmutex->unlock();
}
return m_pinstacne;
}
void FileMd5Instance::fileMd5(const QDir &dir)
{
QStringList fileList = dir.entryList(QDir::Files, QDir::NoSort);
for(int i=0;i<fileList.size();i++){
QFile file(dir.path()+"/"+fileList.value(i));
file.open(QIODevice::ReadOnly);
QByteArray ba = QCryptographicHash::hash(file.readAll(), QCryptographicHash::Md5);
file.close();
qDebug()<<"fileMd5 file: "<<fileList.value(i)<<" MD5:"<< ba.toHex().constData();
}
}
void FileMd5Instance::bigFileMd5(const QDir &dir)
{
QStringList fileList = dir.entryList(QDir::Files, QDir::NoSort);
for(int i=0;i<fileList.size();i++){
QFile file(dir.path()+"/"+fileList.value(i));
file.open(QIODevice::ReadOnly);
QCryptographicHash md5(QCryptographicHash::Md5);
qint64 totalBytes = 0;
qint64 bytesWritten = 0;
qint64 bytesToWrite = 0;
qint64 loadSize = 1024 * 4;
QByteArray buf;
totalBytes = file.size();
bytesToWrite = totalBytes;
while (1){
if(bytesToWrite > 0){
buf = file.read(qMin(bytesToWrite, loadSize));
md5.addData(buf);
bytesWritten += buf.length();
bytesToWrite -= buf.length();
buf.resize(0);
}else{
break;
}
if(bytesWritten == totalBytes)
break;
}
file.close();
qDebug()<<"bigFileMd5 file: "<<fileList.value(i)<<" MD5:"<< md5.result().toHex().constData();
}
}
第三に、レンダリング