Seite 1 von 1
Hashwert von Files generieren
Verfasst: 22. Januar 2006 10:38
von Nassian
Hallo,
Ich muss so schnell wie möglich den Hashwert aus ca. 8-10.000 Dateien (jeweils ~4MB groß) erzeugen. Mein erster Test mit dem extra Programm md5sum war ernüchternd. Knappe 2 Minuten dauert es insgesamt. Geht das ganze vielleicht auch schneller und vorallem, hat Qt4 eine eigene Funktion dafür (Etwas md5 ähnliches konnte ich in der Doku nicht finden).
MfG,
Alex
Verfasst: 22. Januar 2006 12:32
von Christian81
Qt bringt in 3rdparty/md5 auch die md5 Hashfunktion mit.
aber schneller wird es trotzdem nicht... 10000 * 4MB = 40GB - da ist wohl erstens deine Platte und zweitens dein Prozzi das Problem...
Verfasst: 22. Januar 2006 12:39
von Nassian
Es muss auch nicht md5 sein. Ich brauch nur etwas um einen eindeutigen Hash, möglichst schnell aus den Dateien erstellen zu können. Zum Hintergrund: Ich muss sehen, ob sich die Datei verändert hat um sie dann zu synchronisieren (erneut herunterladen).
MfG,
Alex
Verfasst: 22. Januar 2006 14:01
von seneca
Änderungsdatum der Datei abfragen?
Verfasst: 22. Januar 2006 14:34
von Nassian
Hmm, könnte ne Möglichkeit sein; Würde ich aber eher meiden, da es dann Probleme gibt, wenn sie Zeit vom Server und Client unterschiedlich sind.
Verfasst: 22. Januar 2006 14:35
von BartSimpson
mit dem Datum das dürfte zu ungenau sein. Du kannst es mal mit openssl versuchen. Da wird teilweise ASM Kode benutzt. Das könnte eventuell deutlich schneller sein.
Verfasst: 30. Januar 2006 19:25
von Jonez
Hi,
tschuldigung dass ich den beitrag hier stör, aber hat mir jemand vielleicht ein beispiel wie ich dieses 3rdpardty tool md5 verwenden kann?
danke,
jonas
Verfasst: 30. Januar 2006 19:34
von Christian81
Hier meine Funktion um nur geänderte Header für Q.../Free zu kopieren. Ist GPL.
Code: Alles auswählen
void copyFile( const QString& src, const QString& dest )
{
#ifdef DEBUG_LINK_INCLUDES
fprintf( stdout, "copyFile( %s, %s )\n", src.latin1(), dest.latin1() );
#endif
QFile s( src );
QFile d( dest );
if ( onlyNew ) {
QFileInfo src_info( src );
QFileInfo dst_info( dest );
if ( ( dst_info.exists() ) && ( src_info.size() == dst_info.size() ) ) {
s.open( IO_ReadOnly | IO_Translate );
d.open( IO_ReadOnly | IO_Translate );
QByteArray s_ba = s.readAll();
if ( qtMD5( s_ba ) == qtMD5( d.readAll() ) ) {
s.close();
d.close();
if ( verbose )
fprintf( stdout, "File %s isn't changed - skipping\n",
QDir::convertSeparators( src ).ascii() );
return ;
}
if ( dryrun )
return ;
s.close();
d.close();
d.open( IO_WriteOnly | IO_Truncate | IO_Translate );
d.writeBlock( s_ba );
d.close();
return ;
}
}
if ( verbose )
fprintf( stdout, "copying %s to %s\n", QDir::convertSeparators( src ).ascii(),
QDir::convertSeparators( dest ).ascii() );
if ( dryrun )
return ;
s.open( IO_ReadOnly | IO_Translate );
d.open( IO_WriteOnly | IO_Truncate | IO_Translate );
d.writeBlock( s.readAll() );
s.close();
d.close();
}