Kopierte Textdateien miteinander abgleichen (QFile)

Alles rund um die Programmierung mit Qt
Antworten
heha
Beiträge: 9
Registriert: 25. November 2014 12:41

Kopierte Textdateien miteinander abgleichen (QFile)

Beitrag von heha »

Hallo zusammen,

wir haben vor kurzem bei uns in der Firma auch angefangen QT ein zu setzen. Jetzt stehe ich vor dem ersten Problem, für welches ich im Internet bislang leider noch keine für mich passende Lösung gefunden habe.

Und zwar wird in einem meiner Programme eine QFile Kopierfunktion gestartet. Am Ende des Kopiervorgangs frage ich ab, ob die Datei am Zielort auch existiert mit QFile::exists. Erst dann wird die zu kopierende Datei gelöscht.

Gerne hätte ich eine Funktion, die es nicht nur ermöglicht ab zu fragen, ob die Datei existiert, sondern auch gegenprüft, ob der Inhalt der selbe ist.

Ich stelle mir eine Funktion wie folgt vor : QFile File1, File2 - if(file1 = file2) { ... } else ....

Kann mir da jemand helfen?

Vielen Dank und beste Grüße
Kevin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Kopierte Textdateien miteinander abgleichen (QFile)

Beitrag von Christian81 »

Beide Dateien lesen und entweder direkt den Inhalt vergleichen und/oder einen Hash-Wert berechnen und diesen vergleichen. Wenn man allerdings eine Datei kopiert hat dann ist sie auch gleich. Und wenn es Schreibfehler gibt wirst Du sie mit dieser Methode wohl auch nicht finden da der Dateiinhalt wohl noch im Betriebssystem-Cache vorliegt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
heha
Beiträge: 9
Registriert: 25. November 2014 12:41

Re: Kopierte Textdateien miteinander abgleichen (QFile)

Beitrag von heha »

Leider ist es eine Vorgabe in einem Projekt, die kopierte Datei auf vollständigkeit zu prüfen. Ansonsten gebe ich Dir im Normalfall natürlich Recht!

Kannst Du mir die erste Variante (Lesen / Inhalt vergleichen) einmal kurz versuchen zu erklären? Weche Funktion nutze ich dafür ?

Vielen Dank und liebe Grüße
Kevin
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: Kopierte Textdateien miteinander abgleichen (QFile)

Beitrag von dazedly »

Du kannst Zeilenweise vergleichen mit readLine, oder du kannst die ganze Datei einlesen und als QByteArray vergleichen. QFile kannst du zum vergleichen vergessen, du musst es schon auslesen (QDataStream).
heha
Beiträge: 9
Registriert: 25. November 2014 12:41

Re: Kopierte Textdateien miteinander abgleichen (QFile)

Beitrag von heha »

Prima, vielen Dank!

Habe es nun mit der QByteArray Funkion realisiert bekommen.
Hashwert generiert und entsprechend verglichen!
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

Re: Kopierte Textdateien miteinander abgleichen (QFile)

Beitrag von softwaremaker »

Na wenn dann machen wir ein bisschen Code dazu, damit jeder sieht wie es gehen könnte.
Diese Funktion liefert den MD5-Hash einer Datei zurück. Den Hash von 2 Dateien kann man mit QString::compare vergleichen. Die Funktion funktioniert problemlos mit Riesen-Dateien, da die Datei in 10 MB - Blöcken gelesen wird.

Code: Alles auswählen

QString MainWindow::GetFileHash( QString filename )
{
    QCryptographicHash hash_md5(  QCryptographicHash::Md5  );
    QFile file( filename );
    if ( !file.open( QFile::ReadOnly ) )  return QString();
    QByteArray  data;
    while( !file.atEnd() )
    {
        data = file.read( 10000000 );
        hash_md5.addData( data );
    }
    QByteArray hash = hash_md5.result();
    return QString( hash.toHex().toUpper() );
}
Antworten