AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Filedup 1.0.7.0 - Identische Dateien finden
Thema durchsuchen
Ansicht
Themen-Optionen

Filedup 1.0.7.0 - Identische Dateien finden

Ein Thema von bigg · begonnen am 21. Jul 2005 · letzter Beitrag vom 16. Jun 2007
Antwort Antwort
Seite 3 von 12     123 45     Letzte »    
bigg
Kann gelöscht werden.
 
bigg
 
#21
  Alt 25. Jul 2005, 13:23
@Luckie:
Jupp, da hast du recht.


Update 2:

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.

Grau markierte Dateien sind identisch/ doppelt.
Grün markierte Dateien haben einen identischen Kopf.
Blau markierte Dateien sind gleich groß.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

 
Delphi 11 Alexandria
 
#22
  Alt 25. Jul 2005, 13:29
Ich würde vorschlagen bei sehr großen Dateien die ersten 5 KB, die letzten 5 KB und 2 - 3 mal zwischendurch 5 KB zu scannen... Wenn die gleich seien sollten, dann kannste wirklich die ganze Datei scannen...

Edit: So ne kleine Idee hätte noch... Bau doch ne Funktion ein, die die ganze Festplatte scannt (Kann meinetwegen auch 3 Stunden dauern...)
Ronny
  Mit Zitat antworten Zitat
bigg
 
#23
  Alt 25. Jul 2005, 13:40
Zitat:
Edit: So ne kleine Idee hätte noch... Bau doch ne Funktion ein, die die ganze Festplatte scannt (Kann meinetwegen auch 3 Stunden dauern...)
Das hatte ich eigentlich nicht vor :>
  Mit Zitat antworten Zitat
Olli
 
#24
  Alt 25. Jul 2005, 13:42
Zitat von SubData:
Bau doch ne Funktion ein, die die ganze Festplatte scannt (Kann meinetwegen auch 3 Stunden dauern...)
Alternativ DFHL. Mahlzeit
  Mit Zitat antworten Zitat
bigg
 
#25
  Alt 25. Jul 2005, 13:46
Zitat:
Alternativ DFHL. Mahlzeit
Benötigt aber NTFS.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

 
Delphi 11 Alexandria
 
#26
  Alt 25. Jul 2005, 13:50
Naja NTFS ist nicht das Problem, aber ich wollte eigentlich keine Hard Links haben, sondern die doppelten Dateien aufgelistet um diese dann ggf. löschen zu können :>
Ronny
  Mit Zitat antworten Zitat
Olli
 
#27
  Alt 25. Jul 2005, 13:54
Zitat von SubData:
Naja NTFS ist nicht das Problem, aber ich wollte eigentlich keine Hard Links haben, sondern die doppelten Dateien aufgelistet um diese dann ggf. löschen zu können :>
DFHL kann beides ... Hardlinks gehen zwar nur auf NTFS, auflisten sollte aber beliebig gehen.

@bigg: Gut bemerkt.
  Mit Zitat antworten Zitat
bigg
 
#28
  Alt 25. Jul 2005, 13:56
Da bin ich noch am rum filtern, aber sowas wird es natürlich geben.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH
 
#29
  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
bigg
 
#30
  Alt 3. Aug 2005, 12:21
moin hagen,

das ehrt mich jetzt aber .

Zitat von negah:
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.
Ich scanne mit absicht den Kopf, da ich so auch verwandte Dateien auffinden kann.
So könnte man auch den Dateityp ermitteln, ein sehr schoener nebeneffekt.

Aber da gebe ich dir recht, es ist wahrscheinlicher im hinteren Teil der Datei unterschiede zu entdecken.



Zitat:
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ß.
Ich könnte doch aber auch die Position in der Datei verschieben und dann meinen Puffer füllen.
So muesste ich seperat Speicher reservieren und das hatte ich eigentlich nicht vor.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 12     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz