Announcement

Collapse
No announcement yet.

Datei Vergleich

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datei Vergleich

    Hi ich versuche gerade ein Prog zu schreiben, dass 2 Dateien vergleicht ob sie identisch sind. Leider bedarf es dazu entweder einem Programm das dies bit für bit macht (dauert lange). Ich möchte da lieber für jede Datei eine Prüfsumme erstellen (CRC?) und einfach diese miteinander vergleichen.
    Gibt es eine einfache Methode dies zu machen?? Wie eine CRC Überprüfung in der Theorie aussieht ist mir bekannt, wie ich das jedoch effektiv umsetze ist mir noch nicht so klar.

    Für Tipps wäre ich dankbar.

    MfG

    Christopher

  • #2
    CRC's sollten zu ungenau sein und viel zu viele Übereinstimmungen melden wo keine sind. Besser ist die Benutzung einer sicheren Hashfunktion wie MD4/MD5. Zudem sind sie meistens auch noch schneller, zB. MD4 bringts auf über 200Mb/sec.<br>

    Du benötigst also eine Funktion die den MD4 der Datei zieht. Dann eine Funktion die über alle Dateien iterieren kann, sprich FindFirst()/FindNext()/FindClose(). Nun erzeugt diese Funktion einen binären Baum aller Dateien, sortiert nach deren Dateigröße. Denn nur Dateien mit gleicher Dateigröße müssen überprüft werden. Eventuell kann man diesen Baum noch mehr einschränken wenn man Dateinamen,Dateidaties im Vergleich einbezieht. Übrig bleiben Dateien die untereinander per Hashwert verglichen werden müssen. Sprich statt jede Datei mit allen anderen zu vergleichen, vergleicht man nur Dateien mit geleiche Größe+Namen+Daties untereinander. Dies ist wesentlich effektiver. Ich habe mal selber so was gecodet. Dieses System hat in ca. 2 Minuten alle Duplikate aus ca. 300.000 Dateien auf meinen Platten gefunden.

    Gruß Hage

    Comment


    • #3
      gut, den ungefähren Aufbau hatte ich auch schon, nun bedarf es nur noch der Info wie MD4 berechnet wird und ich bin happy. Denn den Rest (Baum auslesen und Infos der Dateien Sichern) Habe ich schon

      Comment


      • #4
        DEC = Delphi Encryption Compendium enthält alle wichtigen Hash funktionen. Es ist Freeqare mit Sourcen. Eventuell habe ich noch eine besser optimeirte Version, die einiges schneller ist.

        Gruß Hage

        Comment


        • #5
          Danke erstmal... hat zwar ne ganze Weile gedauert bis ich die Kompo am laufen hatte, doch nun scheint sie zu arbeiten, das einzige was sie nicht mag ist wenn eine Datei gerade benutzt wird, während sie ihren Code berechnen will. Woran liegt es eigentlich das alle Dateien am Ende des Codes == stehen haben??

          Wenn ich nochmal auf Probleme stoße werde ich mich melden, die Indexdateien kann ich ja nun erstellen, nun bedarf es noch einer Routine diese auszuwerten, aber das muss wohl bis morgen warten.

          Bis dann

          Christophe

          Comment


          • #6
            zum hashen einer Datei gehste so vor
            <pre>

            ResultAsString := THash_MD4.CalcFile(MyFileName, nil, fmtMIME64);

            </pre>

            Nun der binäre Digest wird intern in einen String umgewandelt der dem Internet MIME Base 64 Standard entspricht. Da der Digest aber nicht ein Mehrfaches von 3 in der Länge ist werden die beiden Terminierungezeichen "==" hinten angefügt. Du könntest mit fmtHEX auch eine HEXadezimale Formatierung benutzen oder mit fmtCOPY einfach den binären Digest in den String kopieren lassen.

            Gruß hage

            Comment


            • #7
              hm der jammert bei mir rum, dass der fmtmime64 nicht deklariert ist.

              In den uses steht bislang nur Hash drin.

              Hatte das Problem auch schon mit fmtHEX weshalb ich das einfach weggelassen habe

              Comment


              • #8
                Binde mal die Unit DecUtil mit ein.<p>
                Schöne Grüße, Mario Noac
                Schöne Grüße, Mario

                Comment


                • #9
                  oder fmtHEX = 16, fmtBse64 = 64

                  Gruß Hage

                  Comment

                  Working...
                  X