![]() |
Entzippen 7za
Hi,
hab die untenstehende Prozedur aus dem Forum gefunden um Dateien zu entzippen. In dem Beitrag stand auch, das sie funktionieren würde. Tut sie bei mir aber nicht. Ich verstehe nicht ganz die beiden Übergabeparameter. 1.zu entzippende Datei(Pfad) 2.entzippte Datei(Pfad)...Er legt halt wirklich nur eine Datei an. War entpackt er die Datei(en) nicht automatisch in einen Ordner? Ist doch klar das Dateien nicht in eine andere Datei entzippt werden können. Wie untenstehend habe ich die Dateiendung weggelassen, in der Hoffnung das ein Ordner anstatt einer DAtei erstellt wird. Aber klappt nicht. Uses
Delphi-Quellcode:
Prozedur
{$IFDEF FPC}zstream{$ELSE}ZLib{$ENDIF}
Delphi-Quellcode:
Aufruf
procedure Decompress(InputFileName, OutputFileName: string);
var InputStream, OutputStream: TFileStream; DeCompressionStream: TDeCompressionStream; Buf: array[0..4095] of Byte; Count: Integer; begin InputStream:=TFileStream.Create(InputFileName, fmOpenRead); try OutputStream:=TFileStream.Create(OutputFileName, fmCreate); try DecompressionStream := TDecompressionStream.Create(InputStream); try while true do begin Count := DecompressionStream.Read(Buf[0], SizeOf(Buf)); if Count = 0 then break else OutputStream.Write(Buf[0], Count); end; finally DecompressionStream.Free; end; finally OutputStream.Free; end; finally InputStream.Free; end; end;
Delphi-Quellcode:
Decompress(TempDownloadDir+IP+'\'+Form1.ListBox3.Items[i], TempDownloadDir+IP+'\'+SubStr{+'.log'});
|
Re: Entzippen mit zstream/zlib
Ich glaub du nimmst etwas an was nicht so ist. zlib unt TCompressionStream/TDecompressionStream sind nicht für Zip-Dateien.
|
Re: Entzippen mit zstream/zlib
Irgendwie hat ich auch so die Vermutung. Und mit welchen Werkzeugen muss ich operieren? (bibliothek?kompo?methoden?)
Hatte auch an ein ShellExecute gedacht und irgendwie die Windows standard funktion nutzen, die ich alelrdings nicht kenne. XP besitzt ja die fähigkeiten zips zu öffenen/entpacken...komme ich auf dem weg zum ziel? |
Re: Entzippen mit zstream/zlib
Hallo,
such mit Google mal nach ZipMaster, da gibt es irgendwo eine freie Komponente. |
Re: Entzippen mit zstream/zlib
Jo, danke. Hab schon vorher den Shell ansatz ausprobiert.
mit 7za.exe (kommandozeilen zip/unzip) funktioniert es fast. an sich bekomme ich dateien entpackt. aber ich weiss nicht warum genau bei dieser "C:\Dokumente und Einstellungen\duy5j5\Desktop\Neuer Ordner\Trier\Praxisarbeit_I\Programm\TempDownload\ 10.159.194.114\009_0946_629SGG1027_LOGFILES.zip" eingabe das archiv nicht gefunden werden kann...hab das archiv auch ma nach "d:\009_0946_629SGG1027_LOGFILES.zip" verschoben und dort extrahieren lassen. das hat funktioniert. der lange pfad ist korrekt. hat es was mit den leerzeichen zu tun? oder aus den backslashes frontslashes machen? |
Re: Entzippen mit zstream/zlib
Hallo,
die Leerzeichen könnten ein Problem sein, wenn sie nicht mit den Hochkommata über ShellExecute beim Programm ankommen sollten, dann wird der Dateiname als mehrere Parameter interpretiert. Mach Dir mal 'ne Batchdatei, die Du per ShellExecute aufrufst. Der Batchdatei übergibst Du Deinen bisherigen Aufruf in Shellexecute in unveränderter Form. Die Batchdatei könnte in etwas so aussehen (nicht getestet)
Code:
Wenn Du in der Ausgabe der Batchdatei den Dateinamen auf mehrer Zeilen verteilt siehst, sind die Leerzeichen das Problem, da dann der Dateiname nicht als ein Parameter übergeben wird.
@ECHO OFF
Name der Batchdatei %0 Parameter 1 %1 Parameter 2 %2 Parameter 3 %3 Parameter 4 %4 Parameter 5 %5 Parameter 6 %6 Parameter 7 %7 Parameter 8 %8 Parameter 9 %9 @pause |
Re: Entzippen mit zstream/zlib
Okay nun funktioniert es. habe wie hier im Beitrag die hochkommata zum hervorheben auch mit in die übergabe eingebaut. jetzt funktioniert es. was allerdings immernoch unverständlich für mich ist, warum der selbe pfad nicht direkt in der kommandozeile per hand funktioniert (auch nicht mit hochkommata)...naja egal, danke schön :)
Für alle die ein ähnliches Vorhaben tätigen wollen, also zippen/entzippen - so funktionierts: Es gibt keine Kommandozeile mit der die WinXP zip funktion ansprechen kann. deshalb "7za.exe" ausm netz laden. ein aufruf im quelltext könnte so aussehen
Delphi-Quellcode:
Die Übergabeparameter können +ber die Kommandozeile ausgelesen werden (ins Verzeichnis von "7za.exe" wechseln und in die anweisung "7za" eingeben). Viel Spaß :)
ShellExecute(0, 'open', PChar(EXEpfadVON7za+'\7za.exe'), PChar('x "'+DATEIPFADderZIPdatei+'"'), nil, SW_SHOWNORMAL);
|
Re: Entzippen mit zstream/zlib
Zitat:
![]() |
Re: Entzippen mit zstream/zlib
Wird oft überlesen, aber ich arbeite "leider nur" mit lazarus. da funktioniert selten mal eine für delphi geschriebene bibo. aber danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 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