
Ich entwickle gerade ein Programm, womit man Datei-Duplikate erkennen soll. Ich verwende dazu einen Hash-Algo, der die Prüfsummen der Dateien erstellt. Ich habe das schon mit MD5 probiert. Das Problem: Je größer die Dateien sind, desto länger dauert die Brechnung. Wenn ich die Prüfsumme einer Datei mit circa 1,5 GB mit MD5 berechnen lasse, dauert das länger als eine Minute.

Darum habe ich mich etwas umgesehen und nach einen schnelleren Hash-Algo umgesehen. Da bin ich auf CRC gestoßen. Nur ist mein Problem, dass ich nicht weiß, wie ich diese Funktion nutzen soll. Zwar gibt es in der Unit crc ein kleines Beispiel, aber anfangen kann ich damit nichts.
Könnte mir jemand erklären, wie ich die Funktion verwenden muss, damit ich einen Hashwert einer Datei erhalte?
Code: Alles auswählen
function crc32(crc: cardinal; buf: Pbyte; len: cardinal): cardinal;
{ Update a running crc with the bytes buf[0..len-1] and return the updated
crc. If buf is NULL, this function returns the required initial value
for the crc. Pre- and post-conditioning (one's complement) is performed
within this function so it shouldn't be done by the application.
Usage example:
var
crc : cardinal;
begin
crc := crc32(0, nil, 0);
while (read_buffer(buffer, length) <> EOF) do
crc := crc32(crc, buffer, length);
if (crc <> original_crc) then error();
end;
}
-- Dee