Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#6

AW: Grosse Dateien vergleichen. Schnell, Sicher und Einfach ;)

  Alt 29. Apr 2022, 11:26
Nur wenn dabei gleich rauskommt, könnten die Dateien auch inhaltlich gleich sein. Erst dann kann mit der MD5-Checksumme (oder eine andere Checksumme) festgestellt werden, ob die Dateien nun wirklich gleich sind oder nicht.
Es macht keinen Sinn eine Checksumme über die komplette Datei zu erstellen um diese dann zu vergleichen. Erstens kann es dabei Kollisionen geben und zweitens müssen dafür beide Dateien komplett gelesen werden. Die Wahrscheinlichkeit, dass es - insbesondere bei einem falsch vergebenen Dateinamen - schon am Anfang der Dateien Unterschiede gibt, ist aber relativ hoch.

Deshalb macht es hier tatsächlich Sinn die Dateien von vorne an durchzugehen und direkt zu vergleichen, wenn die Dateigröße übereinstimmt.

Da Zip-Dateien meines Wissens kein zentrales Inhaltsverzeichnis haben, sondern alle Informationen in den lokalen Headern der einzelnen Dateien stehen, muss auch dafür viel gelesen werden, aber gerade bei größeren Dateien im Archiv könnte man einiges überspringen, so dass es auf diese Weise dennoch schneller gehen kann als wenn man alles liest.
Bei allen mir bekannten ZIP-Dateien steht das Inhaltsverzeichnis am Ende der ZIP-Datei (https://en.wikipedia.org/wiki/ZIP_(f...ry_file_header).

Wenn man byteweise vergleicht und der Unterschied am Anfang zu finden ist, kann man viel Zeit sparen. Wenn er am Ende steht eher nicht. Ist also alles ein bisserl Glücksache. Bei einer statistischen Normalverteilung der Unterschiede könnte sich die Laufzeit hier allerdings durchaus halbieren

Kollisionen bei Checksummen sind immer möglich, aber im realen Leben sehr selten anzufinden.
Bei der MD5-Checksumme können sie vorkommen, sind mir im realen Leben allerdings noch nicht begegnet (und das bei etlichen Millionen von Datenvergleichen / nicht nur Dateien, Blobfelder in Datenbanken ..., nicht nur ab und an mal so ein paar).

Unklar ist bei der Aufgabenstellung allerdings: Wie oft kommen identische Dateigrößen überhaupt vor?
Mit der Folge: Wie oft ist ein Checksummenvergleich oder ein byteweiser Vergleich überhaupt erforderlich?

Mehrfach täglich oder einmal im Jahr?

Lohnt dann der Aufwand der Implementierung des byteweisen Vergleiches oder nehmen wir sporadisch mal die hohe Laufzeit für die Ermittlung der MD5-Checksummen in kauf?
  Mit Zitat antworten Zitat