クライアントソフトウェアアップデートポリシーQCryptographicHashネットワークモジュール(C)

I.説明
インターネット企業のクライアントソフトウェアのアップグレードは、多くの場合に分けられます。

  1. 正常に(ソフトウェアのバージョン番号と判断します)
    1. インクリメンタルアップグレード
    2. 全額のアップグレード
  2. 必須のアップグレード
    1. 全額のアップグレード
  3. グレーアップグレード
    グレー、ヒットの方針に従い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();
    }
}

第三に、レンダリング
ここに画像を挿入説明
ここに画像を挿入説明

公開された30元の記事 ウォンの賞賛1 ビュー1143

おすすめ

転載: blog.csdn.net/u010906468/article/details/104877962