:> compile rothmichael /o de.obj|

 
// Ben.Ausw. auswerten
/****************************/
/* Füllt die Liste mit      */
/* allen Projekten          */
/****************************/
KB_MichaelRoth::fillProjList()
{
   m_projekte.push_back
      (new KB_IniEditor);
    m_projekte.push_back
      (new KB_KBKW);
    m_projekte.push_back
      (new KB_FDFB);
   m_projekte.push_back
      (new KB_Crypt);
   m_projekte.push_back
      (new KB_IncludeScanner);
    m_projekte.push_back
      (new KB_FAQCT);
    m_projekte.push_back
      (new KB_HexDumper);
  }
}
 

FDFB - Find Double Files Binary

In diesem Projekt ging es um zwei Punkte:

  • Auffinden von identischen Dateien die irgendwann mal kopiert wurden
  • Experimente mit Policy Klassen

Das Programm erstellt verschiedene Listen der Dateien im angegebenen Verzeichnis. Im ersten Schritt werden die Dateien mit ihrer Größe gesammelt. Aus diesem Ergebnis werden Listen erstellt. Jede Liste enthält die Dateinamen der Dateien die auf das Byte genau die gleiche Größe haben. (Sonst können diese nicht binär identisch sein). Im letzten Schritt werden die Dateien untereinander verglichen. Da das Programm für den reinen Lokalen gebrauch geschrieben wurde , verzichtete ich auf das erzeugen einer Hashnummer. Das Berechnen einer Hashnummer würde immer das komplette Einlesen der Datei erfordern. FDFB vergleicht die Dateien jedoch nur bis zum ersten Unterschied. Da doppelte Dateien relativ wenig vorhanden sind, erspart man sich hier etwas Zeit. (Anders sieht es aus wenn die Daten über eine langsame Verbindung verglichen werden müssen. Hier wäre die Hashmethode der bessere Weg).

Das Experiment liegt mit verschiedenen Beispielen als Quelltext vor:

FindDoubleFilesBinary.zip

 

#include "..\..\CompareDoubleFilesBin.h"
    
void output(const std::list<std::string> & dasda)
{
    copy(dasda.begin(),dasda.end(),std::ostream_iterator<std::string>(std::cout,"\n"));
    std::cout<<"\n";
}

int main(int argc, char* argv[])
{
    CompareDoubleFilesBin t;
    t.findDoubles("c:\\");
    const CompareDoubleFilesBin::doubleList & theList =  t.get_DoubleList();

    std::for_each(theList.begin(),theList.end(),std::ptr_fun(output));

    return 0;
}

    
				  /************************************************************************/
				  /* (C) 2003 Michael Roth http://www.rothmichael.de info@rothmichael.de  */
				  /************************************************************************/