2013-05-05 89 views

回答

33

QFile打開文件,並致電readAll()將其內容拉入QByteArray。然後用它來撥打QCryptographicHash::hash(const QByteArray& data, Algorithm method)

在QT5你可以使用addData()

// Returns empty QByteArray() on failure. 
QByteArray fileChecksum(const QString &fileName, 
         QCryptographicHash::Algorithm hashAlgorithm) 
{ 
    QFile f(fileName); 
    if (f.open(QFile::ReadOnly)) { 
     QCryptographicHash hash(hashAlgorithm); 
     if (hash.addData(&f)) { 
      return hash.result(); 
     } 
    } 
    return QByteArray(); 
} 
+3

它的工作,我不得不添加.toHex()。謝謝! – user2282405 2013-05-05 10:38:09

+12

readAll()立即將所有內容讀入內存,對於大文件不是一個好主意。我寧願使用addData(&file)。 – 2013-05-05 10:45:52

+2

@FrankOsterfeld我同意,我正在簡化以解決問題 - 這是OP的責任,確保它不會使系統崩潰。 – cmannett85 2013-05-05 10:50:17