2013-05-05 8 views

Antwort

33

Öffnen Sie die Datei mit QFile, und rufen Sie readAll(), um seinen Inhalt in eine QByteArray zu ziehen. Dann verwenden Sie das für den QCryptographicHash::hash(const QByteArray& data, Algorithm method) Anruf.

In QT5 können Sie addData() verwenden:

// 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

Es funktionierte, musste ich einfach .toHex() hinzufügen. Vielen Dank! – user2282405

+12

readAll() liest alles in den Speicher auf einmal, keine gute Idee für große Dateien. Ich würde lieber addData (& file) verwenden. –

+2

@FrankOsterfeld Ich stimme zu, ich habe mich vereinfacht, um den Punkt klar zu machen - es liegt in der Verantwortung des OP, dafür zu sorgen, dass es das System nicht zum Absturz bringt. – cmannett85