PDA

Vollständige Version anzeigen : Erstellen von Zip-Dateien


Alexander Jan Peters
05.01.2002, 08:49
<font face="Tahoma">Hallo,

ich benötige für eine Anwendung die Möglichkeit Dateien zu komprimieren, das Format ist dabei relativ egal, sogar die Kompressionsrate ist nicht wirklich entscheidend. Wichtig ist mir vor allem, daß es ohne Zusatzsoftware machbar ist. Mit einer Vollversion von Winzip geht es, aber nicht jeder User hat eine Vollversion.
Ich habe leider keine Ahnung, wie ich das ohne ActiveX-Elemente (versuche ich möglichst zu vermeiden) sonst lösen kann.
Der Vorgang soll aus der Anwendung heraus automatisch erfolgen.
Hat vielleicht jemand Erfahrung damit?
Jede Anregung ist willkommen.

Gruß

A.J. Peters</font>

Stefan Kulpa
05.01.2002, 10:37
<font face="Verdana" size="2">Hallo!

Das ist nicht so ganz einfach - jedenfalls nicht ohne Fremdcontrol. Man kann zwar die DOS-Programme COMPRESS.EXE bzw. COMPACT.EXE benutzen, aber sehr schön ist das nicht.
<a href="http://support.microsoft.com/support/kb/articles/Q140/8/74.asp" target="_blank">Hier</a> noch eine Info zur COMPRESS.EXE.

Ansonsten findest Du <a href="http://www.planet-source-code.com/vb/scripts/BrowseCategoryOrSearchResults.asp?lngWId=1&B1=Quick+Search&blnWorldDropDownUsed=TRUE&txtMaxNumberOfEntriesPerPage=10&blnResetAllV ariables=TRUE&txtCriteria=compress&optSort=Alphabetical" target="_blank">hier</a> einige recht gute Ansätze.

HTH, Stefan</font>

Sascha Trowitzsch
05.01.2002, 11:22
Ich habe das einige Zeit mit Winzip und dem Commandline Utility gemacht. Dazu braucht es nicht die Vollversion. Das ist allerdings nicht so besonders "ästhetisch", da sich eine DOS-Box öffnet, die man NICHT verstecken kann, weil dort erst eine Bestätigung über den Gebrauch von WinZip mit ENTER gemacht werden muss.

Nun benutze ich das OCX ActiveZipper; klein und ohne viel Programmieraufwand.

Ohne zumindest eine separate DLL wird es wohl auch kaum gehen. In VBA einen Zip-Codec zu programmieren dürfte ziemlich sinnlos sein. (...Hab allerdings auch noch nicht danach geschaut.)

Da demnächst auch etwas ähnliches brauche, werde ich mich mal sehen, daß ich mit Delphi selber eine DLL erstelle. Für Delphi gibt es freie Zip-Komponenten. Ich melde mich gegebenenfalls dann an dieser Stelle nochmal.

Ciao, Sascha

Alexander Jan Peters
05.01.2002, 23:20
<font face="Tahoma">Hallo,

erst einmal vielen Dank für die schnellen Antworten.
@Stefan
Ich konnte leider bisher, trotz intensiver Suche, nichts über die Nutzung der compress.exe herausbekommen (MSDN-Online bzw. Offline). Alle Artikel, Beispiele etc. behandeln überwiegend das Entpacken von Dateien, die mit dieser Anwendung verpackt wurden.
Falls jemand dazu einen Hinweis, eine Beschreibung der nutzbaren Parameter oder ähnliches hat (geht auch in C), bitte einen Hinweis posten.
Bei Planet-Source-Code (s.Posting v. Stefan) waren allerdings Tonnen :eek: netter Beispiele zu Kompression zu finden. Danke.
Eines dieser <a href="http://www.planet-source-code.com/xq/ASP/txtCodeId.11000/lngWId.1/qx/vb/scripts/ShowCode.htm">Beispiele</a> habe ich mir für Access angepaßt (ehrlich gesagt kopiert, das Verstehen wird der nächste Schritt). Damit ist es mir jetzt möglich, Einzel-Dateien mit dem Huffman-Verfahren (wenn ich das Ganze recht kapiert habe, ist das der Algorithmus, den auch Standard-Packer verwenden) zu komprimieren/dekomprimieren.
Die Ergebnisse sind ganz vielversprechend (MDB um ca. 30% kleiner)und das Ganze nutzt keine externen Programme.
@Sascha
Die Geschichte mit Winzip und dem Command-Line-Utility war es, die ich meinte, als ich von der Winzip-Vollversion sprach. Die User sollten diese Meldungsfenster nicht sehen (wirkt leider so unfertig).

Nochmals Danke,

Gruß

A.J. Peters</font>

Gustav Kurz
05.01.2002, 23:45
<font size="2" face="verdana">Hallo Alexander,

vielleicht könntest Du Dich ja mal an "AWSW" - also an Axel richten - ich meine von ihm mal ein Code-snippet gesehen zu haben, in dem man beliebige Dateien aus Access in eine *.zip Datei ohne weitere Dialogfelder und Anfragen übergeben kann. (wenn mich nicht alles täuscht per Shell-Befehl)

Gruß
Gustav aus 78224-Singen

Gustav Kurz
05.01.2002, 23:52
<font size="2" face="verdana">...jetzt hab ich das Teil sogar noch bei mir auf der FP gefunden. ;)

Hier ein Code-auszug:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="REM">'Erstellung der "Berichte.zip"-Datei:</span>
<span class="TOKEN">Call</span> Shell("C:\AWSW-AccessToMail\Tool\Mail.exe a -m5 -ibck -ep C:\AWSW-AccessToMail\OutPutTo\Berichte.zip C:\AWSW-AccessToMail\OutPutTo\*.*", 1)</pre></div>

Allerdings hab ich zur Mail.exe keinerlei Dokumentation!

Gruß
Gustav aus 78224-Singen

Alexander Jan Peters
05.01.2002, 23:53
<font face="Tahoma">Hallo Gustav,

ich glaube, Du meinst <a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=50014">mdb koieren zippen und dann auf einem externen datenträger speichern???</a>.
Hätte ich eigentlich schon bei meiner ersten Suche in den Beiträgen finden müssen, na ja, zu Zip kommt halt sehr viel.
Danke, werd' ich mal ausprobieren.

Gruß

A.J. Peters</font>

Gustav Kurz
06.01.2002, 00:04
<font size="2" face="verdana">Den Beitrag kenne ich nicht - der Aufruf sieht aber dem von mir geposteten sehr ähnlich.

Wie dem auch sei - der gute Axel scheint da bereits viel Erfahrungen zu haben und kann Dir sicher weiterhelfen... :)

Gruß
Gustav aus 78224-Singen

AWSW
06.01.2002, 02:50
Hallo Ihr Lieben,
na ich hoffe ich kann Euch weiter helfen...

Ich habe mir dazu vor etwa 1 Jahr den Kopf zerbrochen und kann aus meiner eigenen Erfahrung nur sagen, das WinZip IMHO nicht so gut geeignet ist, wie das WinRar. Denn WinZip brachte mich damals zum verzweifeln, da ich ein automatisches Sicherungsprogramm entwickeln wollte, dass in vorgegebenen Zeitabständen mich an eine Sicherung erinnert und dann diese auch selbstständig ausführt. Dabei wurden damals zunächst in Access (und mittlerweile auch verfeinert in VB6) eine Liste mit Dateien und Verzeichnissen erfasst, die der User selbst angeben kann... Das ganze dient zumindest für mich als Sicherungsfunktion während einer Programmentwicklung und sichert halt in vorgegebenen Zeitabständen die in der Liste erfassen Dateien in eine komprimierte und mit Zeitstempel versehene Datei...

WinRar ist aus meiner Sicht deshalb besser, da WinZip eine Begrenzung von 2GB hat, die ich nicht gebrauchen konnte und ich mit WinRar mehr Möglichkeiten hatte und auch keine extra Zusatzextentions brauchte... Alles was nötig ist die WINRAR.exe und ggf. wenn selbstextrahierende Dateien erzeugt werden sollen, die "default.sfx" die im WinRar-Verzeichnis liegt. Die Bezeichnung Mail.exe war nur damals zum Ausprobieren, ob es denn auch ohne meine aktuell installierte WinRar Version klappt, wenn eine ältere Version vorhanden ist und das geht auch. Man ist somit nicht an so viele Voraussetzungen gebunden... Wenn man die Dateiendung einfach von „.zip“ auf „.rar“ ändert, lassen sich auf Wunsch dann auch die sehr verbreiteten RAR-Archive erstellen. Wird in dem Modul „Packen“ noch im WinRar-Aufruf der Schalter –sfx hinzugefügt, werden dann auch automatisch selbstextrahierende EXE-Dateien erzeugt...

Es ist richtig es tauchen keinerlei PopUps etc. auf. WinRar wird einfach ausgeführt und es läuft bisher absolut 1a. Man kann entweder eine Ausführung im SystemTray mit dem Schalter –ibck erzwingen oder das ganze auch mit einem netten Fortschrittsbalken laufen lassen:

packen1.jpg

packen2.jpg

Ich habe die Funktion inzwischen etwas verbessert und Euch eben mal als Beispieldatei auf meine Seite: <a href="http://www.awsw.de" target="_blank">http://www.awsw.de</a> im Bereich Access abgelegt. In diesem Beispiel wird Euer WindowsVerzeichnis ermittelt und dann werden alle Bilder mit Endung: „.bmp“ in eine ZIP-Datei auf C:\ gepackt. Ich habe einige Kommentare dabei geschrieben und hoffe Ihr kommt klar damit ;)


Ich hoffe das hilft Euch weiter :D


Und damit von meiner Seite: Gute Nacht da draußen...

Sascha Trowitzsch
06.01.2002, 03:41
Hi A.J. Peters,

ich hab mir dieses VB-Programm auch mal angesehen.
Abgesehen von der immer noch dürftigen Geschwindigkeit würde mir die Kompression nicht reichen. Bsp.: Die MDB ist 4,3Mb groß, diese .huf-Datei wird 2,6Mb groß und ein Zip nur 1,2Mb.

Ich brauch das Zippen für einen regelmäßigen FTP-Upload und da ist es schon ein Unterschied, ob das 3 Minuten oder nur 80sec dauert.

Für was brauchst du's denn?
Und warum darf's kein OCX sein?
(ActiveZipper lite z.B. ist umsonst.)

AWSW's Methode ist natürlich auch überlegenswert.

Ciao, Sascha

Alexander Jan Peters
06.01.2002, 05:37
<font face="Tahoma">Hallo Sascha,

die Kompressionrate wird für meinen Zweck auch nicht reichen. Es ist eine reine Archivierung- bzw. Backup-Routine, die eine besondere Verschlüsselung bekommen soll (w/personenbezogenen Daten). Geschwindigkeit ist nicht wichtig, die Verschlüsselung ist dabei die Hauptsache, ich wollte nur zusätzlich komprimieren, um die Pakete auf Diskettengröße zu bringen. Ein Block ist unkomprimiert etwa 4 - 4,5 MB groß.
Meine Abneigung gegen OCX rührt wohl von den schlechten Erfahrungen mit diesen her, sonst gibt es da keinen speziellen Grund.
<a href="http://www.iessoft.com/scripts/actzip.asp">ActiveZipper (Lite)</a> ist auch für kommerzielle Anwendung lizenzfrei - klingt nicht übel.
Muß ich aber erst einmal ausprobieren.
Ich glaub aber, daß die Lösung von Axel die beste Variante ist, mit den vielen unterstützen Formaten bei WinRAR und vor allem der Fähigkeit Zitat: "ohne installierte WinRar Version" trotzdem zu arbeiten ...
Weiß jemand, wie die rechtliche Seite dabei aussieht, darf man das Programm so verwenden?

Vielen Dank für die rege (An-)Teilnahme :p

Gruß

Alex

P.S. @Sascha, sag' Alex, dieses A.J. Peters hab' mir mal in einer NG angewöhnt, weil da noch ein anderer Alexander Peters rumirrte ...</font>

[ 06. Januar 2002: Beitrag editiert von: Alexander Jan Peters ]</p>

Alexander Jan Peters
06.01.2002, 06:02
<font face="Tahoma">Tja, die Frage nach der rechtlichen Seite hätte ich mir wohl schenken können, wenn ich vorher mal die Lizenzbedingungen gelesen hätte:
</font><font face="Courier New">
2. RAR darf waehrend eines Zeitraums von 40 Tagen getestet werden.
Wird RAR ueber die Testphase hinaus benutzt, MUSS sich der Nutzer
registrieren lassen.

3. Es gibt 5 Arten von Lizenzen, die fuer RAR vorgesehen sind. Dies
sind im einzelnen:
e. Eine Firmen-, Wiederverkaeuferlizenz. Der Benutzer kauft eine Lizenz fuer
eine limitierte und festgelegte Anzahl an Kopien mit dem Zweck des Wieder-
verkaufs individueller Lizenzen an Dritte, wobei RAR als Teil eines anderen
Programms oder Systems gilt. Diese Lizenz erlaubt nicht den direkten Wieder-
verkauf von RAR als eigenstaendiges Produkt.

4. Die unregistrierte Sharewareversion von RAR darf ohne Einschraenkungen
verteilt werden, sofern Umfang und Inhalt des Originalpakets nicht ver-
aendert werden. Niemand darf fuer die Weitergabe von RAR ohne schriftliche
Erlaubnis des Autors eine Gebuehr erheben.

8. Jeder Gebrauch von RAR (kopieren, klonen, emulieren, vermieten, Leasing,
veraendern, dekompilieren, disassemblieren) oder eines Teils von RAR, der
ueber die Lizenzbestimmungen hinaus geht, ist untersagt und fuehrt zum
sofortigen automatischen Erloeschen der Lizenz. Der Autor behaelt sich eine
eine straf- und / oder zivilrechtliche Verfolgung vor.
</font>

AWSW
06.01.2002, 12:10
Hi,
registrieren lassen musst Du Dich natürlich. Das sollte klar sein. Das Beispiel nutzt aber ganz normale Kommandozeilenaufrufe, die in der WinRarHilfe dokumentiert sind. Also eine Änderung in irgend einer Form an den originalen Dateien liegt IMHO nicht vor, da nur vorhandene Funktionen, wie dokumentiert, genutzt werden. Sollte ich da falsch liegen klärt mich auf, aber ich habe damals auch so die Bedingungen verstanden, dass es OK ist und deshalb daran weiter gearbeitet... Mit dem "ohne installierte Version" meinte ich, dass man nicht nochmal extra Extentions braucht, wie beim WinZip und damit nur die normale Installation des WinRar, durch das WinRarSetup. Halt nichts noch zusätzlich...

Lanz Rudolf
06.01.2002, 14:57
Hallo zusammen,
ich habe dise Diskussion mit Interesse verfolgt.
Nun möchte ich's auch aus probieren aber hier liegt mein Problem: :confused:
Wo bekomme ich "WinRar"
Kann mir jemand helfen?

A.S.
06.01.2002, 15:04
Hallo Ruedi,

zum Beispiel bei <a href="http://php.zdnet.de/download/showprg-wc.php3?id=de0D7H" target="_blank">ZDNet</a>

HTH

Arno

Alexander Jan Peters
06.01.2002, 19:39
<font face="Tahoma">Hallo Axel,

da hatte ich Dich missverstanden und da ich WinRAR auf dem Rechner habe, hatte ich auch nicht geprüft, ob nur die EXE (ohne Installation) nötig ist.
Zu den rechtlichen Dingen:
1) Gut, daß ich eine Reseller-Lizenz brauche, war mir klar, ich hab' die Punkte der Lizenzbestimmmungen nur aus Gründen der Vollständigkeit mitgepostet.
2) Ich verstehe Deine Verwendung nur als einen Eingriff laut Punkt 8, wenn Du keine Reseller-Lizenz hast.
Du verwendest schließlich nur einen Teil des Programms, in der englischen Version der Lizenz wird das deutlicher ausgeschlossen.
</font><font face="Courier New">
RAR and WinRAR keyfiles may not be distributed, except as stated
in item 3) above, outside of the area of legal control of the
person or persons who purchased the original license, without
written permission of the copyright holder.

</font><font face="Tahoma">
Das geht eigentlich nur mit der o.g. Lizenz.
Oder aber, wenn Du die Dateien nicht weitergibst, sondern Dein Code beim Kunden nur vorhandene Installationen nutzt.
Der Link zur Herstellerseite:
<a href="http://www.rarsoft.com/">www.rarsoft.com</a>

Gruß

Alex</font>

AWSW
06.01.2002, 20:27
Hallo Alex,
ich vertreibe ja gar keine WinRar Dateien, so wie Du das hier in der engl. Textpassage anführst. Die Zeile in dem Code ruft lediglich eine Anwendung auf. In dem Fall das ganz normal installierte WinRar. Ich nutze also nur eine vorhandene Installation. Da ich eine registrierte Version für meinen Eigenbedarf habe, ist doch alles im Lot, da ich nur über vorhandene freigegebene Schalter auf ein Programm zugreife, dass ich erworben habe. Kunden habe ich keine, da ich nichts vertreibe und es nur für den Eigenbedarf nutze. Für die Registration des WinRar ist jeder selbst verantwortlich. Der oben aufgeführte Code nutzt lediglich vorhandene Schalter, die im WinRar in der Hilfe als für den „Befehlszeilenmodus“ verwendbare Aufrufe aufgeführt sind. Also mache ich nichts anderes, als dort in der Hilfe extra als Verwendung des Programms beschrieben steht. Somit ist dies hier IMHO nicht zutreffend, was da in dem engl. Text steht. Jeder muss für seine eigene Linzens des WinRar sorgen und darf diese nicht weitergeben und das tue ich mit dem Code nun ja auch nicht, da ich, wie erwähnt, nur eigens freigegebene Funktionen nutze. Wenn dies nicht erlaubt wäre dürfte man sich auch keine Batchdatei schreiben und dort die gleichen Schalter aufrufen, um das eigene Programm zu nutzen. Ich habe mir eben deshalb noch mal die gesamten Lizenzbedingungen angeschaut und dort ist nichts enthalten, was dagegen spricht die vorhandene registrierte Programmdatei in Ihren Funktionen wie geschehen zu nutzen.

A.S.
06.01.2002, 20:48
Hallo Alex,

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">Zitat:</font><hr>2) Ich verstehe Deine Verwendung nur als einen Eingriff laut Punkt 8, wenn Du keine Reseller-Lizenz hast.
Du verwendest schließlich nur einen Teil des Programms, in der englischen Version der Lizenz wird das deutlicher ausgeschlossen.

RAR and WinRAR keyfiles may not be distributed, except as stated
in item 3) above, outside of the area of legal control of the
person or persons who purchased the original license, without
written permission of the copyright holder.


Das geht eigentlich nur mit der o.g. Lizenz.
Oder aber, wenn Du die Dateien nicht weitergibst, sondern Dein Code beim Kunden nur vorhandene Installationen nutzt.<hr></blockquote>

Letzteres (was ich hervorgehoben habe) ist doch, wie Axel IMHO bereits mehrfach gesagt hat und wie es anders auch nicht dem hier geposteten Codesnippet von Axel zu entnehmen ist, der Fall!

Axel benutzt lediglich vorhandene und in der Produktbeschreibung (OnlineHilfe) ausgewiesene Resourcen des Packers. Er manipuliert keine Programmdateien und nichts. Der Aufruf geschieht über Parameterangaben, welche von den Programmierern bzw. Herstellern vorgesehen und veröffentlicht worden sind ;)

Da er das Programm selbst nicht vertreibt, hat er damit auch kein Problem ;)

Gruß

Arno

Alexander Jan Peters
06.01.2002, 21:19
<font face="Tahoma">So ein Drama wollte ich daraus gar nicht machen. ;)
Ich habe es genau so wie Ihr verstanden.
@Axel
Die Geschichte mit der "Mail.exe" aus Deinem Posting hat mich wohl irritiert, denn es klang für mich so, als ob die einfach weitergegeben werden sollte.

Gruß

Alex
P.S. Mit diesem Mißverständnis haben wir es immerhin geschafft, das hier zu einem Top-Thema aufzublähen ;) </font>

[ 06. Januar 2002: Beitrag editiert von: Alexander Jan Peters ]</p>

Sascha Trowitzsch
11.01.2002, 13:42
Siehe auch:

<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=65036" target="_blank">ZIP-Komprimierung, die 2.</a>