Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Entzippen 7za (https://www.delphipraxis.net/127548-entzippen-7za.html)

LuCSteR 15. Jan 2009 10:17


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:
{$IFDEF FPC}zstream{$ELSE}ZLib{$ENDIF}
Prozedur
Delphi-Quellcode:
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;
Aufruf
Delphi-Quellcode:
Decompress(TempDownloadDir+IP+'\'+Form1.ListBox3.Items[i], TempDownloadDir+IP+'\'+SubStr{+'.log'});

SirThornberry 15. Jan 2009 10:25

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.

LuCSteR 15. Jan 2009 11:00

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?

nahpets 15. Jan 2009 13:26

Re: Entzippen mit zstream/zlib
 
Hallo,

such mit Google mal nach ZipMaster, da gibt es irgendwo eine freie Komponente.

LuCSteR 15. Jan 2009 13:47

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?

nahpets 15. Jan 2009 13:57

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

LuCSteR 15. Jan 2009 14:22

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:
ShellExecute(0, 'open', PChar(EXEpfadVON7za+'\7za.exe'), PChar('x "'+DATEIPFADderZIPdatei+'"'), nil, SW_SHOWNORMAL);
Die Übergabeparameter können +ber die Kommandozeile ausgelesen werden (ins Verzeichnis von "7za.exe" wechseln und in die anweisung "7za" eingeben). Viel Spaß :)

sofl 15. Jan 2009 14:27

Re: Entzippen mit zstream/zlib
 
Zitat:

Zitat von LuCSteR
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?

Eine Möglichkeit wäre auch die JEDI VCL lib zu installieren. Unter den 600 Komponenten befinden sich auch recht gute zip und cab Komponenten.

LuCSteR 15. Jan 2009 14:51

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