QByteArray bei großen Datenmengen

Alles rund um die Programmierung mit Qt
Antworten
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

QByteArray bei großen Datenmengen

Beitrag von ArneStocker »

Hallo liebes Forum
ich habe folgende Frage:

Nach dem Kopieren (im Rahmen eines Backups) prüfe ich mit einem Checksummenverfahren ob Ziel und Quelldatei identisch sind. Hierzu verwende ich die Qt - Funktion Qtmd5.

Code: Alles auswählen

bool CheckSumm(const QString& source, const QString& dest)
{
    bool check = false;
    QString sourceCheckSumme, destCheckSumme;
    // Checksumme für source
    QFile sourceFile(source);
    if (sourceFile.open(IO_ReadOnly) == true) {
        sourceCheckSumme = qtMD5(sourceFile.readAll());
        sourceFile.close();
    }
    // Checksumme für dest
    QFile destFile(dest);
    if (destFile.open(IO_ReadOnly) == true) {
        destCheckSumme = qtMD5(destFile.readAll());
        destFile.close();
    }
    // Checksummen vergleichen
    if  ( (destCheckSumme.isEmpty() == false) && 
          (destCheckSumme == sourceCheckSumme) )
    {
        check = true;
    }
    return check;
}
Was passiert eigentlich mit dem Aufruf QFile::readAll(), wenn die Größe der Datei den Arbeitsspeicher übersteigt (bei einer Datenbankdatei durchaus möglich) ? Natürlich kann ich dass alles in einem try-catch-modus laufen lassen, aber gewußt hätte ich es schon gerne. Hat jemand eine Idee ?

Gruß Arne
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Das QByteArray kann eh nur max. 4GB groß werden.
Ein Blick die Doku wird dir verraten, das das Array die Größe 0 hat, wenn readAll scheitert.
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Meinst du nicht dass es etwas ineffizient ist erst alles in den RAM zu laden und dann die Prüfsumme zu berechnen? Stell dir mal vor ein kleines MD5-Tool brächte 4,7GB RAM um den Hash eines DVD-Images zu berechnen. Am besten du berechnest den Hash in kleineren Blöcken, das geht zwar nicht mir der Qt-Funktion aber es gibt ja genug freie MD5-Implementierungen im Netz.
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

OK, überzeugt, da werde ich wohl noch ein wenig nacharbeiten müssen.

Danke für die Antworten

Arne
Antworten