Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: ZIP-Datei erkennen mit Zipmaster

  Alt 5. Jan 2006, 20:34
Du kannst natürlich auch nach der ZIP-Signatur suchen, z.B. nach 'PK'#5#6 in den letzten 1024 Bytes einer Datei. An der Fundstelle sollte sich die folgende Struktur befinden:

Delphi-Quellcode:
const
  CZipCentralDirectorySign = $06054b50;
  CZipCentralFileHeaderSign = $02014b50;

type
  TZipCentralDirectoryRecord = packed record
    Signature: Cardinal; // CZipCentralDirectorySign
    DiskNumber: Word;
    EndDiskNumber: Word;
    EntryCount: Word;
    TotalEntryCount: Word;
    DirectorySize: Cardinal;
    DirectoryOffset: Cardinal;
    CommentLength: Word;
  end;
Darin kannst du einige Prüfungen vornehmen:
1. In einer einfachen ZIP-Datei sind DiskNumber = 0, EndDiskNumber = 0 und EntryCount = TotalEntryCount.
2. DirectoryOffset *UND* DirectoryOffset + DirectorySize müssen unterhalb der gefundenen Dateiposition sein.

Wenn das zutrifft dann hast du mit hoher Wahrscheinlichkeit eine ZIP-Datei.

Ansonsten kannst du an der Stelle DirectoryOffset noch einmal 4 Bytes einlesen und dort auf den Wert CZipCentralFileHeaderSign prüfen.

//Nachtrag: Für alle die's interessiert: .ZIP File Format Specification.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat