[ zurück ] Icon


Programmierung von Zip-Programmen mit den Delphi


echte Helfer beim Packen

Soll es in Ihren Programmen um mehr als nur das Hineinsehen mittels eines Viewers in Zip-Dateien gehen, ist die Unterstützung durch einschlägige Fremdprogramme sinnvoll. Ein eigener Versuch für einen Kompressionsalgorithmus lohnt sich nur dann, wenn Sie eine ausschließliche Archivsoftware produzieren wollen. Anderenfalls finden Sie als Delphi-Programmierer unter http://www.torry.ru/compressstd.htm einen umfangreichen Überblick über den Markt der Zip-Tools.

Besonders sei Ihre Aufmerksamkeit auf die Quellen http://www.geocities.com/SiliconValley/Network/2114 und http://www.geocities.com/SiliconValley/Orchard/8607 gelenkt. In beiden finden Sie eine Komponente TZipMaster, mit der Sie im Handumdrehen eine komplette Zip-fähige Software schreiben.

Allerdings erfordert deren Gebrauch (wie auch der Gebrauch anderer ähnlicher Delphi-Komponenten) die Verwendung und auch Weitergabe der DLLs ZipDll.dll und UnzDll.dll der Free-Zip-Gemeinde, die aber den Komponenten praktischerweise gleich beiliegen. Der Umgang mit der TZipMaster-Komponente ist schnell erlernt, zumal Hilfedateien sowie Demoprojekte und Komponente im Quellcode verfügbar sind.

Das Bild zeigt eine komplette Zip-Applikation auf der Basis von TZipMaster, wie sie als Beispiel in den Dokumentationen zu diser freien VCL-Komponente zu finden ist. Das im Quellcode beiliegende komplette Zip-Programm demonstriert den Umgang mit der Komponente TZipMaster.

Viewer

Beim Programmieren Ihrer Applikation ziehen Sie sich die installierte Komponente TZipMaster aus der Palettenseite Samples in Ihr Formular. Entweder zur Entwurfszeit oder besser später zur Laufzeit setzen Sie die Eigenschaft ZipFileName auf den Namen des Zip-Archivs. In FSpecArgs, einer Stringliste, führen Sie alle Dateien auf, die in das oder aus dem Zip-File transferiert werden sollen. Über die Eigenschaften AddOptions beziehungsweise ExtrOptions können Sie Zusatzvereinbarungen für Ihr Archiv treffen. Zum Beispiel, ob Pfadangaben oder Unterverzeichnisse mit ausgewertet werden sollen oder nicht. Die wichtigsten Methoden der VCL-Komponente sind dann Add, Extract, Delete und List. Sie erlauben Ihnen alle Aktionen, die für den Umgang mit Zip-Archiven notwendig sind.

Die nachfolgenden Zeilen demonstrieren, wie mit wenigen Anweisungen mehrere allseits bekannte Dateien zu einem Zip-Archiv zusammengepackt werden.

 ZipMstr1.ZipFileName:='SOS.zip';
 if FileExists('C:\Autoexec.bat') then
   ZipMstr1.FSpecArgs.Add('C:\Autoexec.bat');
 if FileExists('C:\Config.sys') then
   ZipMstr1.FSpecArgs.Add('C:\Config.sys');
 if FileExists('C:\Windows\Win.ini') then
   ZipMstr1.FSpecArgs.Add('C:\Windows\*.ini');
 ZipMstr1.Add;   {hier wird komprimiert}
 ShowMessage(IntToStr(ZipMstr1.SuccessCnt) + ' Dateien hinzugefügt!'); 

Auch beim Dekomprimieren von Zip-Archiven mittels TZipMaster arbeiten Sie ähnlich komfortabel. Hier legen Sie außer ZipFileName noch das Ausgabeverzeichnis ExtrBaseDir fest. In die Liste FSpecArgs schreiben Sie diesmal, welche Dateien aus dem Zip-File extrahiert werden sollen. Dazu kann im einfachsten Falle der Platzhalter "*.*" dienen.

Damit das Packen oder Entpacken erfolgreich stattfinden kann, müssen Sie einmal im Programmtext die DLLs ZipDll.dll bzw. UnzDll.dll laden. Aber auch dafür hat die Komponente TZipMaster vorgefertigte Methoden Load_Zip_Dll und Load_Unz_Dll.

Insgesamt also eine für fast alle Fälle ausreichende und bequeme Lösung, deren Zeitverhalten beim Packen und Entpacken auf einschlägigen Wertungsseiten im Internet zudem lobend erwähnt wird.


Einen ähnlichen Weg beschreiten Sie mit den zahlreichen Packer-Komponenten unter http://www.ziptv.com. Hier finden Sie nahezu pures Delphi. In C geschriebene DLLs sind nicht erforderlich. Allerdings ist ob der Vielfalt der Komponenten und der weniger übersichtlichen Demoprojekte die Einarbeitung etwas schwieriger.

Mittels der Komponenten TZip und TUnZip bearbeiten Sie Zip-Archive. Beide Objekte verfügen über ähnliche Eigenschaften und Methoden wie TZipMaster aus der oben beschriebenen Sammlung.

Das nachfolgende kurze Listing zeigt die wichtigsten Anweisungen, mittels derer Sie mit diesen Tools beispielsweise eine komprimierte Datei anlegen.

 var nFiles: Integer;
 Zip1.ArchiveFile:='SOS.zip';
 Zip1.FileSpec.Clear;
 Zip1.FileSpec.Add('C:\Autoexec.bat');
 Zip1.FileSpec.Add('C:\Config.sys');
 nFiles:=Zip1.Compress;
 ShowMessage(IntToStr(nFiles)) + ' Dateien hinzugefügt!'); 

Darüber hinaus bietet die Komponentensammlung noch viele zusätzliche Möglichkeiten. TZipSearch beispielsweise durchsucht alle im Zip-File verpackten Dateien nach dem Vorkommen eines Textes oder einer Bytefolge, ohne das Archiv vorher auszupacken. Außerdem beschränkt sich diese Quelle nicht nur auf Zip-Archive, sondern verarbeitet praktisch alle wichtigen Packformate.


Mit diesen Informationen ausgestattet, können Sie Ihren zukünftigen Programmen das Zippen sicherlich problemlos beibringen.

J. Hummel,   Juni 2000

[ Programmierung ] [ Zip-Programmierung ]