Hashwert von Files generieren

Alles rund um die Programmierung mit Qt
Antworten
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Hashwert von Files generieren

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag 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
seneca
Beiträge: 23
Registriert: 6. Januar 2006 09:57

Beitrag von seneca »

Änderungsdatum der Datei abfragen?
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
Jonez
Beiträge: 22
Registriert: 7. Oktober 2005 01:01
Kontaktdaten:

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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();
}
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten