Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Zip-Archiv entpacken

  Alt 9. Jan 2020, 14:32
Hallo.

Ich suche eine einfache Möglichkeit, ein Zip-Archiv zu entpacken.

Nach Recherchieren im INet und im Forum habe ich alles verworfen. Das meiste ist uralt, anderes gibts nicht mehr, weil der Entwickler verstorben ist, manches ist kostenpflichig, und nochmal anderes ist mir zu aufwendig, oder ich kriege es nicht auf die Reihe.

Das bisher geeignetste ist System.Zip.TZipFile.ExtractZipFile. Es ist in Delphi 10.3 schon enthalten und macht nur das eine, was ich brauche: Es entpackt eine Zip-Datei in einen Ziel-Ordner. Was ich bisher habe:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
  private
    { Private-Deklarationen }
    class procedure ShowZipProgress(Sender: TObject; FileName: string;
      Header: TZipHeader; Position: Int64);
Delphi-Quellcode:
implementation

{$R *.dfm}

class procedure TForm1.ShowZipProgress(Sender: TObject; FileName: string;
  Header: TZipHeader; Position: Int64);
begin
  // Show your progress here, whatever it needs to do

  ProgressBar1.Max := Header.UncompressedSize; // <== Edit - hatte ich vergessen.
  ProgressBar1.Position := Position;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ProgressBar1.Max := 0;
  TZipFile.ExtractZipFile('F:\1\Test.zip', 'F:\1\2\', ShowZipProgress);
end;
Was unbedingt fehlt sind eine Möglichkeit das Ende des Entpack-Vorgangs zu erkennen, und eine Möglichkeit zum Abbrechen des Entpackvorgangs (z. B. weil es zu lange dauert).

Was dazu könnte, wäre eine Progressanzeige. Das ProgressBar1.Position := Position; das ich verwende, funktioniert hierbei nicht. Es wird kein Gesamtfortschritt gezeigt, sondern für jede Datei einzeln. Die Progressbar flackert also ständig.

Wichtig sind allerdings die beiden Punkte "Entpacken-Ende erkennen" und "Entpacken abbrechen". Hat jemand ein Code-Beispiel?


Edit: Hinweis gefunden und oben eingefügt, dass vor die Event-Deklaration ein "class" gehört: class procedure ShowZipProgress(Sender: ...

Geändert von Guido Eisenbeis (10. Jan 2020 um 01:10 Uhr)
  Mit Zitat antworten Zitat