Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ZIP-Datei erkennen mit Zipmaster (https://www.delphipraxis.net/60322-zip-datei-erkennen-mit-zipmaster.html)

Mattze 5. Jan 2006 11:18


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

Lannes 5. Jan 2006 13:54

Re: ZIP-Datei erkennen mit Zipmaster
 
Hallo,

mit Zipmaster zwar nicht, aber eventuell ist das etwas für Dich:
:arrow: delphi-Forum: archiv testen

Mattze 5. Jan 2006 16:59

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

Lannes 5. Jan 2006 20:07

Re: ZIP-Datei erkennen mit Zipmaster
 
Hallo,
Zitat:

Zitat von Mattze
...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!)...

Die Dll nutze ich seit ein paar Jahren, keine Probleme diesbezüglich.

Zitat:

Zitat von Mattze
Kennst Du da vielleicht etwas mit Quelle?

Leider nicht, würde ich eine kennen, hätte ich dir nicht die dll empfohlen :wink:

Flocke 5. Jan 2006 20:34

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:
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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