Zippen ohne Zusatzkomponente

Zippen unter VBA ging bislang nur mit Komponenten von Drittherstellern. Dabei liefert Windows (ab XP) doch alles, was man dazu braucht – zwar nicht den Komfort, den “richtige” Zip-Anwendungen wie WinZip und Co. bieten, aber immerhin brauchen Sie keine zusätzlichen Tools zu installieren. Wir zeigen Ihnen, wo die Zip-Funktionen von Windows stecken und wie Sie diese in Ihren Anwendungen einsetzen.

Wer mit Windows XP arbeitet, ist es gewohnt, Zip-Dateien auch ohne zusätzliches Zip-Tool zu öffnen. Der Windows Explorer zeigt sogar den Inhalt von Zip-Dateien an, wenn man diese in der Ordner-Ansicht markiert.

Die dort enthaltenen Funktionen lassen sich auch per VBA ansteuern. Dazu braucht man lediglich einen Verweis auf die Bibliothek Microsoft Shell Controls and Automation und die folgenden VBA-Routinen.

Der Ausgangspunkt für das Zippen sind üblicherweise eine oder mehrere Dateien und/oder Verzeichnisse. Diese sollen unter Beibehaltung der Struktur der enthaltenen Verzeichnisse in eine Zip-Datei geschrieben und wiederhergestellt werden können.

Die oben genannte Bibliothek liefert hierzu zunächst einmal wenig Erbauliches – zumindest, wenn man sich die enthaltenen Methoden und Eigenschaften im Objektkatalog ansieht. Dort kommt man erst weiter, wenn man sich vor Augen führt, was im Windows Explorer geschieht, wenn Sie Dateien aus einer Zip-Datei in ein normales Verzeichnis überführen und umgekehrt – Sie kopieren dort nämlich etwas. Und zum Thema Kopieren liefert die Bibliothek immerhin schon einmal die Methode CopyHere.

Und wenn Sie sich noch ein wenig von der Vorstellung lösen, dass ein Zip-File eine Datei sei und diese mehr als Ordner verstehen, haben Sie fast alles zusammen, was Sie brauchen: Die Methode CopyHere gehört nämlich zum Folder-Objekt.

Es gibt also ein Folder-Objekt, das Sie offensichtlich mithilfe der CopyHere-Methode mit irgendetwas füllen können. Woher beziehen wir das Folder-Objekt, das der Zip-Datei entsprechen sollte Ein weiterer Blick in den Objektkatalog zeigt, dass die Methode Namespace des Shell-Objekts ein Objekt des Typs Folder zurückliefert – und zwar nach Angabe eines Parameters vDir. Dieser kann beispielsweise eine Zeichenkette mit dem Pfad zur Zip-Datei enthalten.

Zip-Datei erstellen

Allerdings haben wir ja eigentlich noch gar keine Zip-Datei. Und das Erstellen nimmt uns die Shell32-Bibliothek leider nicht ab. Sind wir hier schon am Ende unseres Weges Mitnichten. Wir legen einfach ein Zip-Archiv mit einem herkömmlichen Zip-Programm an und löschen anschließend die darin archivierten Dateien. Übrig bleibt ein leeres Zip-Archiv, dessen Inhalt der Hex-Editor aus Abb. 1 liefert. Die Routine CreateZipFile erstellt einfach eine neue, leere Datei und fügt die soeben ermittelten Zeichen zur Datei hinzu, bevor sie diese schließt.

<pic001.tif

Abb. 1: Ein leeres Zip-Archiv im Hex-Editor

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar