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
Kopierte Textdateien miteinander abgleichen (QFile)
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Kopierte Textdateien miteinander abgleichen (QFile)
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Kopierte Textdateien miteinander abgleichen (QFile)
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
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
Re: Kopierte Textdateien miteinander abgleichen (QFile)
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).
Re: Kopierte Textdateien miteinander abgleichen (QFile)
Prima, vielen Dank!
Habe es nun mit der QByteArray Funkion realisiert bekommen.
Hashwert generiert und entsprechend verglichen!
Habe es nun mit der QByteArray Funkion realisiert bekommen.
Hashwert generiert und entsprechend verglichen!
-
- Beiträge: 149
- Registriert: 1. April 2009 19:25
Re: Kopierte Textdateien miteinander abgleichen (QFile)
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.
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() );
}