// 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;
}
|
|