FileChecker...
Verfasst: Mittwoch 16. Februar 2005, 08:53
Ich bastel gerade an einem kleinen FileChecker, der testet ob Dateien OK sind oder kaputt... Ich hab nämlich einige Dateien Bilder/Videos die offensichtlcih zerstört sind, weil sie leider nur noch aus Datenmüll bestehen. Diese will ich entdecken und löschen...
Zur Funktionsweise:
So gut wie jede Datei enthält einen immer gleichen Header, in dem bestimmte Strings immer vorkommen. Sind diese Strings nicht auffindbar, deutet das darauf hin, das die Datei nur noch Datenmüll ist...
Soweit hab ich auch schon eine grob Funktionstüchtige Variante fertig:
http://rafb.net/paste/results/t3ziye49.html
Das Prinzip:
In der Klasse FileInfoSave() sind die Daten hinterlegt, wie die HeaderInformation zu einem Dateityp aussehen:
Bsp.:
MyFileInfo.putFileInfo( "wav", "\A(RIFF).*?(WAVEfmt)", 16, "[('RIFF', 'WAVEfmt')]" )
MyFileInfo.putFileInfo( "exe", "\A(MZ)", 2 )
WAV-Dateien fangen immer mit "RIFF" an und haben in den ersten 16Bytes ein "WAVEfmt" stehen. In diesem Fall wird das re.findall() Ergebniss als String vorgegeben: "[('RIFF', 'WAVEfmt')]" Damit kann ich später, beim eigentlichen Checken einer WAV Datei einfach feststellen, ob die Datei in Odnung ist.
EXE-Dateien (Windows) fangen immer mit "MZ" an.
Und genau hier ist mein Problem.
Ich suche noch eine Sinnvolle Art und Weise die Header<->Dateityp Informationen abzuspeichern...
Anforderungen:
Zur Funktionsweise:
So gut wie jede Datei enthält einen immer gleichen Header, in dem bestimmte Strings immer vorkommen. Sind diese Strings nicht auffindbar, deutet das darauf hin, das die Datei nur noch Datenmüll ist...
Soweit hab ich auch schon eine grob Funktionstüchtige Variante fertig:
http://rafb.net/paste/results/t3ziye49.html
Das Prinzip:
In der Klasse FileInfoSave() sind die Daten hinterlegt, wie die HeaderInformation zu einem Dateityp aussehen:
Bsp.:
MyFileInfo.putFileInfo( "wav", "\A(RIFF).*?(WAVEfmt)", 16, "[('RIFF', 'WAVEfmt')]" )
MyFileInfo.putFileInfo( "exe", "\A(MZ)", 2 )
WAV-Dateien fangen immer mit "RIFF" an und haben in den ersten 16Bytes ein "WAVEfmt" stehen. In diesem Fall wird das re.findall() Ergebniss als String vorgegeben: "[('RIFF', 'WAVEfmt')]" Damit kann ich später, beim eigentlichen Checken einer WAV Datei einfach feststellen, ob die Datei in Odnung ist.
EXE-Dateien (Windows) fangen immer mit "MZ" an.
Und genau hier ist mein Problem.
Ich suche noch eine Sinnvolle Art und Weise die Header<->Dateityp Informationen abzuspeichern...
Anforderungen:
- -Es kann verschiedene Endungen der selbe Dateityp existieren: .jpg .jpeg
-Es sollte verschiendene Analysefunktionen geben: RE oder normaler Stringvergleich
(z.B. die ersten 2Bytes bei EXE-Dateien = "MZ")
-Das "Regelwerk" soll später gut lesbar/erweiterbar in eine Text-Datei
-Zu jedem Dateityp soll noch eine kleine Beschreibung eingefügt werden