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.