Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   .: CheckIt! :. (https://www.delphipraxis.net/59375-checkit.html)

malo 21. Dez 2005 17:14

Re: .: CheckIt! :.
 
:gruebel: Du musst doch nur Hagens Unit in dein Programm einbinden, und die Funktion "CompareFile" aufrufen. Gibt es da etwas nicht zu verstehen?

ichbins 21. Dez 2005 17:32

Re: .: CheckIt! :.
 
Aber der md5- bzw. crc32-Vergleich ist NIE ganz sicher, da er nur den Hash der Datei einliest.

Lies die Datei am besten in 4096-Byte-Blöcken ein und vergleiche diese dann auf einen Schwung. Wenn Unterschiede auftreten kannst du diese per XOR feststellen.

Delphi-Quellcode:
var
  f1,f2:file of byte;
  buf1,buf2,diff:array[1..4096] of byte;
  read,i:integer;
begin
  ...
  while (not eof(f1)) and (not eof(f2)) do
  begin
    fillchar(buf1,4096,#0);
    fillchar(buf2,4096,#0);
    blockread(f1,buf1,4096,x);
    blockread(f2,buf2,x);
    if buf1<>buf2 then
      //wie heisst nochmal der Befehl für Schleife fortsetzen :gruebel: //fällt mir jetzt nicht ein, also mach ichs anders.
    begin
      diff:=buf1 xor buf2;
      for i:=1 to 4096 do
        if diff[i]>0 then
          inc(differents);
    end;
end;

Wenn der Test fertig ist, kriege ich angezeigt: es gibt xxx Unterschiede. Weiteres entnehmen sie dem Errorlog.

Was für ein Errorlog :gruebel:

Tubos 21. Dez 2005 17:56

Re: .: CheckIt! :.
 
Zitat:

Aber der md5- bzw. crc32-Vergleich ist NIE ganz sicher, da er nur den Hash der Datei einliest.
Hash-Algorithmen sind für sowas sicher genug ;)

dahead 21. Dez 2005 18:06

Re: .: CheckIt! :.
 
das wurde zwar alles schon mal diskutiert aber:

erst
vergleichst du die dateigröße. wenn du zwei identische hast, dann
vergleichst du die erstellte checksumme der zwei dateien. wenn du zwei identische hast, dann
vergleichst du die beiden dateien byte für byte. wenn du zwei identische hast,
sind es auf jeden fall doppelte (sprich gleiche) dateien.

sinn dieser reihenfolge ist, dass du nicht sinnlos alle dateien mit allen dateien vergleichst.

als schneller hash empfiehlt sich md4, md5 und bei größeren dateien sha1.

ichbins 21. Dez 2005 18:12

Re: .: CheckIt! :.
 
Aber die Checksumme zu erstellen dauert auch einige Zeit. Dazu muss auch die ganze Datei gelesen und verrechnet werden. Wieso also nicht gleich einen großen Vergleich machen?

dahead 21. Dez 2005 18:14

Re: .: CheckIt! :.
 
ich bin kein fachmann für checksummen, aber soweit ich weiß, wird bei einer checksummen-erstellung NICHT die ganze datei eingelesen.

warum sollte sonst das erstellen einer checksumme zig-fach schneller sein, als der byte-per-byte vergleich einer sagen wir mal +4gb datei?

daher sind checksummen auch NICHT immer eindeutig.

edit: hier wurde alles erklärt.

Tubos 21. Dez 2005 18:17

Re: .: CheckIt! :.
 
Es wird bestimmt die ganze Datei eingelesen, andernfalls könnte es sein dass ein Unterschied von ein paar Byte einen gleichen Hash ergibt - der Sinn von Hashfunktionen ist es, genau das zu verhindern!

dahead 21. Dez 2005 18:22

Re: .: CheckIt! :.
 
wenn zwei dateien eine unterschiedliche Checksumme haben, sind sie definitiv unterschiedlich.

wenn sie den gleichen haben, ist allerdings nicht unbedingt das Gegenteil der Fall.

Tubos 21. Dez 2005 18:34

Re: .: CheckIt! :.
 
Zitat:

wenn sie den gleichen hash haben, ist allerdings nicht unbedingt das Gegenteil der Fall.
Aber mit an Sicherheit grenzender Wahrscheinlichkeit

ichbins 21. Dez 2005 18:44

Re: .: CheckIt! :.
 
Wenn aber sowieso die ganze Datei eingelesen wird kann man doch mit genauso hohem Tempo gleich eine Komplettprüfung vollziehen.

Du machst ja auch nicht beim Bestimmen ob eine Zahl eine Primzahl ist zuerst einen vielleicht-nicht-Primzahltext und testest erst dann, ob es eine Primzahl ist, wenn beide Tests dieselbe Dauer haben :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 Uhr.
Seite 2 von 4     12 34      

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