2013-05-05 27 views

Trả lời

33

Mở tệp bằng QFile và gọi readAll() để kéo nội dung vào một QByteArray. Sau đó, sử dụng cho cuộc gọi QCryptographicHash::hash(const QByteArray& data, Algorithm method).

Trong Qt5 bạn có thể sử dụng 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

Nó làm việc, tôi chỉ phải thêm .toHex(). Cảm ơn! – user2282405

+12

readAll() đọc tất cả mọi thứ vào bộ nhớ cùng một lúc, không phải là một ý tưởng tốt cho các tệp lớn. Tôi muốn sử dụng addData (& file). –

+2

@FrankOsterfeld Tôi đồng ý, tôi đã đơn giản hóa để có được điểm trên - đó là trách nhiệm của OP để đảm bảo rằng nó không làm hỏng hệ thống. – cmannett85