Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: jpeg- fehler #53

  Alt 14. Mai 2019, 13:10
Ungefähr sowas:
Delphi-Quellcode:
function GetIsJPG(fFilename : String) : Boolean;
var
  Buffer : packed array[0 .. 9] of Byte;
  BytesRead : DWORD;
  fFileHandle : THandle
begin
  fFileHandle := CreateFile(PAnsiChar(fFileName),
                 GENERIC_READ,
                 FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
                 nil, OPEN_EXISTING, 0, 0);
  Result := fFileHandle <> INVALID_HANDLE_VALUE;
  if Result then begin
    FillChar(Buffer, SizeOf(Buffer), 0);
    SetFilePointer(fFileHandle, 0, nil, FILE_BEGIN);
    Result := ReadFile(fFileHandle, Buffer, SizeOf(Buffer), BytesRead, nil)
          and (BytesRead >= SizeOf(Buffer))
          and (
           ((Buffer[0] = $FF) and (Buffer[1] = $D8) and (Buffer[2] = $FF))
           or
           ((Buffer[6] = $4A) and (Buffer[7] = $46) and (Buffer[8] = $49) and (Buffer[9] = $46))
          );
  end;
end;
Ob die Prüfung vollständig ist, weiß ich nicht, aber seitdem ich das nutze, bekomme ich den Fehler #53 nicht mehr zu sehen.

Die Dateiendung ist nicht zuverlässig, im Web findet man etliche JPG-Dateien (zumindest der Dateiendung nach) die in Wirklichkeit PNGs sind.

Bei 'nem Stream musst Du die Abfrage entsprechend anpassen, es sind die Bytes 0 bis 2 bzw. 6 bis 9 zu prüfen. Damit ist man eigentlich recht zuverlässig in der Erkennung.
  Mit Zitat antworten Zitat