Zitat von
xaromz:
ist die Prüfung der ersten drei Zeichen nicht ein bisschen wenig? Das kann auch in einer Textdatei stehen.
Abgesehen davon steht in PNGs am Anfang erst $89, bevor "PNG" kommt. Zumindest das könnte man checken.
Besser wäre es aber, den gesamten Header zu lesen und aud Plausibilität zu prüfen,.
Jo man könnte ohne Probleme genauer Prüfen:
Delphi-Quellcode:
function IsPNG(const AFileName: String): Boolean;
var
FileHandle: Integer;
Buf: Int64;
begin
FileHandle := FileOpen(AFileName, fmOpenRead);
FileSeek(FileHandle, 0, 0);
FileRead(FileHandle, Buf, 8);
FileClose(FileHandle);
Result := (Buf = $0A1A0A0D474E5089);
end;
Achtung! Ich hab die Funktion nicht getestet, da ich grad kein PNG sowie Delphi zur Hand habe.
Sollte aber eigentlich funktionieren
Die Wahrscheinlichkeit, dass die ersten 8 Byte zufällig identisch sind sind schon sehr gering. Und dazu kommt ja auch noch die Prüfung der Dateiendung.
EDIT:
Ich hatte doch noch 'n Feher drin. So funktioniert sie aber.