Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#29

Re: FileDup - identische Dateien in einem Ordner suchen

  Alt 3. Aug 2005, 10:26
@Bigg:

Zitat:
Um das Programm noch ein wenig zu beschleunigen, überprüfe ich die ersten > 2 KB
gleich großer Dateien. Sind dort Checksummen gleich, wird ein kompletter Scan durchgeführt und weiter gefiltert.
Diesen Ansatz kannst du weiter ausbauen. D.J.Bernstein, ein genialer Mathematiker und Analyst, benutzt bei seinen vielen mathematischen Verfahren ein ähnliches Vergleichsverfahren.

Du vergleichst immer Stückchenweise beide Dateien solange sie gleich sind. Die Stückchen sind erst zb. 1024 Bytes groß, dann 1024*2 Bytes, dann 1024*4, 1024*8, 1024*16 usw. Bytes groß.

Wie man aber unschwer erkennen kann macht das ausschließlich nur dann Sinn wenn man viele Dateien in parallel und sehr schnell und sehr frühzeitig im Vergleich wissen möchte wieviele Dateien sich unterscheiden.
Vergleicht man aber immer sequientiell zwei dateien miteinander dann macht ein solch kurzer Vergleich absolut keinen Sinn, denn dann vergleicht man die beiden Dateien nur solange bis es einen Untrschied gibt oder eben falls sie gleich sind bis zum Ende der Dateien. Bei dieser Methode hat man den Vorteil das man die beiden Dateien nur einmalig öffnen und schließen muß, man hat also viel weniger Overhead pro Datei.

Für einen Filescanner sollte man sequientiell vorgehen und die beiden Dateien immer vollständig miteinander vergleichen bis sich der erste Unterschied findet. Dabei sollte man vom Ende zum Anfang hin die dateien binär vergleichen. Einfach weil zb. EXE/DLL's immer den gleichen Header besitzen aber meistens am Ende andere Resourcen enthalten. Oder weil WinWord Dokumente mit höherer Wahrscheinlichkeit den gleichen Kopf besitzen aber unterschiedlicher Footer. Oder weil eine ZIP Datei am Anfang die gleichen Dateien gezippt haben könnte, deren ursprüngliche Inhalte aber unterschiedliche waren und somit im Laufe der Komprimierung am Ende der ZIP Datei andere Prüfsummen rauskommen. Die Wahrscheinlichkeit das zwei Dateien sich am Ende unterscheiden ist also größer als das sie sich am Anfang unterscheiden. Programmiertechnisch ist der Vergleich von Hinten nach Vorne kein großer Aufwand, Performancetechnisch reduziert sich aber die Laufzeit auf Grund der unterschiedlichen Wahrscheinlichkeiten.

Gruß Hagen
  Mit Zitat antworten Zitat