AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateityp aus Dateiheader herausfinden

Ein Thema von DrD0j0 · begonnen am 7. Dez 2011 · letzter Beitrag vom 7. Dez 2011
Antwort Antwort
DrD0j0

Registriert seit: 1. Mai 2011
10 Beiträge
 
#1

Dateityp aus Dateiheader herausfinden

  Alt 7. Dez 2011, 20:41
Delphi-Version: 2009
Hallo,

gibt es eine Möglichkeit aus einer Datei den Dateiheader auszulesen und daraus zu erkennen um was für einen Dateityp es sich handelt. Zum Beispiel, ob es eine JPEG-Datei ist?

Wenn ja,
wie kann ich den Dateiheader auslesen?
wie bekomme ich den Dateityp heraus?


Vielen Dank schon einmal für eure Hilfe
  Mit Zitat antworten Zitat
bernerbaer
(Gast)

n/a Beiträge
 
#2

AW: Dateityp aus Dateiheader herausfinden

  Alt 7. Dez 2011, 20:51
Informationen zu vielen Dateiformaten findet man unter wotsit.org
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#3

AW: Dateityp aus Dateiheader herausfinden

  Alt 7. Dez 2011, 21:18
Es gibt auch schon hier und da fertige Funktionen.

Dieses Ungetüm hatte ich mir gestern zusammengeklickt und nun rate mal wo ich die ganzen Header-Infos her hatte?
Delphi-Quellcode:
procedure TSMStreamAttachmentLoader.LoadContentType;
var
  i: Int64;
  L: Integer;
  H: array[0..3] of AnsiChar;
  M: array[0..1] of AnsiChar absolute H;
  K: Word;
begin
  i := FData.Position;
  try
    ContentType := '';
    FData.Position := 0;
    if FData.Size >= SizeOf(H) then begin
      FData.ReadBuffer(H, SizeOf(H));
      for L := 0 to High(H) do
        if H[L] = #0 then H[L] := '°'
        else if H[L] <= #8 then H[L] := '¹'
        else if H[L] = #$89 then H[L] := '²';
      K := (Ord(H[0]) shl 8) or Ord(H[1]);
      if M = 'PK'   then ContentType := 'application/octet-stream'
      else if H = '%PDFthen ContentType := 'application/pdf'
    //else if H = 'PK¹¹' then ContentType := 'application/zip'
      else if H = 'Rar!then ContentType := 'application/x-rar-compressed'
      else if H = 'GIF8then ContentType := 'image/gif'
      else if K = $FFD8 then ContentType := 'image/jpeg'
      else if H = '²PNGthen ContentType := 'image/png'
      else if M = 'BM'   then ContentType := 'image/bmp'
      else if H = 'MM°*then ContentType := 'image/tiff'
      else if H = 'II*°then ContentType := 'image/tiff'
      else if H = '<?xmthen ContentType := 'text/xml'
      else if H = '<°?°then ContentType := 'text/xml';
    end;
  finally
    FData.Position := i;
  end;
end;
Nja, das ist keine 100%ige Prüfung ... wenn man sicher gehn will und auch noch die Unterformate genauer rausbekommen möchte, dann muß man schon mehr, als nur die 2-4 Byte prüfen.


[edit]
schottige Codeausrichtung ... im Zitat/Beitragseditor sieht es hübscher aus
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Dez 2011 um 23:42 Uhr)
  Mit Zitat antworten Zitat
DrD0j0

Registriert seit: 1. Mai 2011
10 Beiträge
 
#4

AW: Dateityp aus Dateiheader herausfinden

  Alt 7. Dez 2011, 21:29
Cool, Danke himitsu

Ist es korrekt, dass du dir die Dateien einfach mit Hex-Editor angeschaut hast und dann dementsprechend eingefügt hast?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#5

AW: Dateityp aus Dateiheader herausfinden

  Alt 7. Dez 2011, 23:39
Google : Dateierweiterung + fileheader
Google : Dateierweiterung + magic number
am Ende landet man jeweils bei Wiki, wotsit, und Co.
http://de.wikipedia.org/wiki/Portable_Network_Graphics > oben rechts das Infofensterchen

Wobei ich das einfache Prinzip der sogenannten "Magic Number" / "Magischen Zahl" ausgenutzt hab.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Dez 2011 um 23:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz