C++ Dateien vergleichen

Ich habe das Problem, dass ich einige Dateien hab, von denen einige mehrfach vorkommen, ich möchte jetzt mit C++ ein Programm schreiben, dass erstens aus einem Verzeichnis und allen Unterverzeichnissen die Namen aller Dateien ausließt und wenn zwei mit dem gleichen namen gefunden werden, dann soll es sie binär vergleichen und für den Fall, dass beide hier ebenfalls ident sind, die Namen ausgeben oder in einer Datei speichern ( Der letzte Punkt ist von der Umsetzung eigentlich eh fast gleich)

Das ganze soll unter Windows XP laufen.

Ich dachte erstmal daran die Namen mit system("dir") zu bekommen, aber wenn ich mir die Ausgabe ansehe, dann seh ich nicht ganz, wie ich die Dateinamen daraus bekomme, also so, dass ich die gut mit meinem Programm bearbeiten kann.

Dann wollt ich fragen, ob es einfach möglich ist, die ganze Datei als string einzulesen, da der Inhalt mir im Prinzip egal ist, also es nur darum geht, ob zwei Dateien inhaltlich identisch sind, ich weiß nur halt nicht, ob das Probleme machen kann, wenn eine Datei groß ist, also teilweise mehrere MB was ja dazu führt, dass der string dann mehrere Millionen Zeichen lang wird und wie es sich auswirken kann, wenn eine Bitfolge als Steuerzeichen interpretiert wird, was ziemlich sicher passiert, weil eben soviele Bits anfallen.

Wäre nett wenn jemand mir da ein paar Antworten geben kann.
 
Generier doch einfach die MD5-Hashes der Dateien und vergleich diese miteinander...
 
Also: Um die Dateien zu vergleichen könntest du jeweils ihre Checksumme generieren. Eine andere Möglichkeit wäre, die Dateien blockweise einzulesen und dann jeweils zu vergleichen. Mit Steuerzeichen sollte es keine Probleme geben, da du ja nicht vorhast, die Datei irgendwie auszugeben. Fürs Vergleichen ist es egal, ob das Byte als ASCII-Zeichen interpretiert druckbar ist oder nicht.

Aufpassen musst du natürlich bei 0-Bytes und Verwendung von Funktionen wie strcmp. Vergleich's also lieber byte für byte.

Zum Thema Verzeichnis einlesen: http://msdn2.microsoft.com/en-us/library/aa365200(VS.85).aspx
 
Erstmal danke für die schnellen Antworten

Wie schnell geht denn das mit den Checksummen? Ich hab vor etwa 9000 Dateien zu vergleichen die im ein bis zweistelligen Megabyte bereich liegen.

/edit ich hab mich entschlossen das nicht mit den Checksummen zu machen, sondern die Größe der Dateien zu vergleichen, die lassen sich nämlich leicht bekommen
 
Zurück
Oben