![]() |
ZIP-Datei erkennen mit Zipmaster
Hallo,
ich habe da schon eine ganze Weile ein Problem. Wie kann man mit dem Zipmaster möglichst schnell und schmerzlos erkennen, ob eine Datei eine ZIP-Datei (oder ZIPSFX-Datei) ist? Bisher habe ich da "TZipArchivStream.CreateFromFile". Geht das auch einfacher? Man könnte sicherlich auch QueryZip verwenden, aber das ist so elendig viel. Hat jemand einen Tipp? Gruß Matthias |
Re: ZIP-Datei erkennen mit Zipmaster
Hallo,
mit Zipmaster zwar nicht, aber eventuell ist das etwas für Dich: :arrow: delphi-Forum: ![]() |
Re: ZIP-Datei erkennen mit Zipmaster
Hallo,
vielen Dank. Das wäre es ja schon. Mich stört bloß "213 Archivformate". Ich brauche nur Zip, Rar und Cab und möchte eigentlich DLLs in eigenen Programmen vermeiden, wo möglich. Außerdem habe ich es mir zur Regel gemacht, nur FW mit Sourcecode zu verwenden. (Ich habe schon mal tolle FW mit einem Backdoor und Trojaner gehabt. Das gefällt mir natürlich nicht!) Kennst Du da vielleicht etwas mit Quelle? (Allgemein: Warum gibt es bei FW keine Quelle? Das ist doch da egal, oder? Wenn das Know-How verborgen werden soll, dann ist es auch Quatsch, das als FW zu deklarieren, oder?) Gruß Matthias |
Re: ZIP-Datei erkennen mit Zipmaster
Hallo,
Zitat:
Zitat:
|
Re: ZIP-Datei erkennen mit Zipmaster
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:
Darin kannst du einige Prüfungen vornehmen:
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; 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: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz