2013-05-05 15 views

risposta

33

Aprire il file con QFile e chiamare readAll() per estrarre il suo contenuto in un QByteArray. Quindi utilizzare quello per la chiamata QCryptographicHash::hash(const QByteArray& data, Algorithm method).

In QT5 è possibile utilizzare 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

ha funzionato, ho dovuto aggiungere .toHex(). Grazie! – user2282405

+12

readAll() legge tutto in memoria in una sola volta, non è una buona idea per file di grandi dimensioni. Preferirei usare addData (& file). –

+2

@FrankOsterfeld Sono d'accordo, mi stavo semplificando per ottenere il punto: è responsabilità dell'OP assicurarsi che non blocchi il sistema. – cmannett85

Problemi correlati