AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zip-Archiv entpacken

Ein Thema von Guido Eisenbeis · begonnen am 9. Jan 2020 · letzter Beitrag vom 13. Jan 2020
Antwort Antwort
Seite 2 von 3     12 3   
venice2

Registriert seit: 5. Dez 2019
Ort: Köln
947 Beiträge
 
Delphi 2010 Architect
 
#11

AW: Zip-Archiv entpacken

  Alt 9. Jan 2020, 17:32
Nun denn!

Delphi-Quellcode:
var
  zipFile: TZipFile;
  fileCount: Integer;
  filename: string;
begin
  zipFile := TZipFile.Create;
  filename := 'xxx'
  zipFile.Open(filename, zmRead);
  fileCount := zipFile.FileCount;
end;
  Mit Zitat antworten Zitat
Guido Eisenbeis

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

AW: Zip-Archiv entpacken

  Alt 10. Jan 2020, 03:26
So hast du uns zwei Codeschnippsel gegeben und gesagt "ich will". Das hat bei mir etwas Unmut ausgelöst. Entschuldige bitte.
Vielen Dank!

Wir "kennen" uns schon seit über 10 Jahren, bei mir kannst du davon ausgehen, dass ich mich vor dem Posten intensiv bemüht habe, Lösungen selbst zu finden.


Zurück zum Thema "Entpacken eines Zip-Archivs"

Dank eurer Hilfe habe ich nun eine Lösung zusammengestellt, mit der ein Zip-Archiv in einen Zielordner entpackt werden kann. Dabei ist eine Fortschrittsanzeige möglich und das Ende des Vorgangs kann festgestellt werden. Und das alles ohne zusätzliche Komponenten, nur mit Delphi internen Möglichkeiten!

Besonderer Dank geht an hoika! Dein Link hat mir den Anfang ermöglicht. Native Zip file support in Delphi XE2 Damit hatte ich Informationen zum Erstellen eines TZipFile-Objekts, und mit den Anweisungen im try-finally Block konnte ich sehen, wie und was wieder freigegeben werden muss.

Information am Rande: zipFile.FileCount gibt einen höheren Wert aus, als ein Datei-Zähler beim Auspacken des Zip-Archivs. Das wird im Moment zwar nicht benötigt, aber interessant wäre es, warum das so ist. Meine Vermutung ist, dass zipFile.FileCount die Ordner im Zip-Archiv mitzählt.

Somit sind 2 von 3 Problemen gelöst. Fehlt nur noch die Möglichkeit zum Abbrechen eines laufenden Entpack-Vorganges. Ideen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

AW: Zip-Archiv entpacken

  Alt 10. Jan 2020, 04:20
Und wie sieht dein Code jetzt aus?

Abbrechen müsste in dem Fortschrittsereignis möglich sein.

PS: Wir kennen uns seit 10 Jahren? Hattest du mal einen anderen Benutzernamen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Guido Eisenbeis

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

AW: Zip-Archiv entpacken

  Alt 10. Jan 2020, 04:49
Und wie sieht dein Code jetzt aus?
Ziemlich durcheinander. Ich räume gerade darin auf. Wenn es jemand interessiert, kann ich das Ergebnis gerne posten.

Abbrechen müsste in dem Fortschrittsereignis möglich sein.
Das scheint mir der richtige Platz zu sein, aber wie kann man das bewerkstelligen?

PS: Wir kennen uns seit 10 Jahren? Hattest du mal einen anderen Benutzernamen?
Damals nicht. "Kennen" in Anführungszeichen meint, dass du eine schillernde Person der Öffentlichkeit warst / bist (= VIP) und ich in jedem zweiten Code-Snippet deinen Namen gefunden habe. Ich selbst bin wohl so unbedeutend, dass du dich nicht erinnern kannst.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

AW: Zip-Archiv entpacken

  Alt 10. Jan 2020, 07:21
Hat die Klasse eine Eigenschaft zum Abbrechen? Dann einfach im Progress-Eventhandler:
if bAbort then zipFile.Abort Oder wie auch immer die Eigenschaft heißt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.105 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Zip-Archiv entpacken

  Alt 10. Jan 2020, 07:32
Hallo,
im ProgressEvent einfach eine Exception erzeugen?

Delphi-Quellcode:
procedure TForm1.OnZipProgress();
begin
  Application.ProcessMe3ssages; // wichtig

  if bAbort then
  begin
    Exception.Create('');
  end;
end;


// Button "Abbrechen"-Klick Methode
procedure TForm1.OnBtnCancelClick;
begin
  bAbort:= True;
end;

procedure TForm1.Entpacke;
begin
  ...
  try
    Zipfile.Extract ...
  except
  end;
end;
Heiko
  Mit Zitat antworten Zitat
Guido Eisenbeis

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

AW: Zip-Archiv entpacken

  Alt 10. Jan 2020, 07:43
Hat die Klasse eine Eigenschaft zum Abbrechen? Dann einfach im Progress-Eventhandler:
if bAbort then zipFile.Abort
Ich habe den Thread erstellt, um ebendiese Information zu bekommen. Weiß jemand, wie man das macht? Gesucht habe ich danach in der Klasse TZipFile, TZipFile.FileInfo und TZipHeader. Leider erfolglos, ein Abort habe ich nicht gefunden. Es gibt ein Close, aber ob das so gut ist, mittendrin einfach zu schließen!? Zudem steht zu der Pozedur in der Hilfe: Dateien können aus einem Archiv ohne Instantiierung von TZipFile-Objekten mit der Klassenprozedur ExtractZipFile extrahiert werden.

Hat jemand eine Idee?
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
179 Beiträge
 
#18

AW: Zip-Archiv entpacken

  Alt 10. Jan 2020, 14:45
Ein kurzer Blick in System.zip ...
ExtractZipFile ist übersichtlich, das "magische" passiert wiederum in "extractall" ...
Auch diese ist übersichtlich und beinhaltet eine Schleife über alle Dateien.
Hier fehlt schon die Option zum Abbrechen ...
Im Wesentlichen ruft "ExtractAll" also "Extract" in einer Schleife auf.
Hier wird dann die komplette Datei "in einem Rutsch" in einen Stream geladen,
danach beschäftigt sich die Funktion im Wesentlichen darum die passende Datei (TFileStream)
anzulegen. Anschließend wird "OnProgress" aufgerufen. Da ist das aber alles schon vorbei.
Ich würde sagen, mit "Syste.Zip.TZipFile.ExtractZipFile" ist ein Abbrechen nicht möglich.

Nächster Versuch wäre "System.ZLib", aber die ist etwas größer als dass ich da eine Aussage treffen würde.
Spontan habe ich nichts mit Abbrechen-Funktion gefunden, aber wie gesagt, sicher kann ich das nicht sagen.

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
Guido Eisenbeis

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

AW: Zip-Archiv entpacken

  Alt 12. Jan 2020, 15:27
im ProgressEvent einfach eine Exception erzeugen?[/DELPHI]
Interessanter Gedanke. Mit welchen Auswirkungen ist denn im schlimmsten Fall zu rechnen?

Im Wesentlichen ruft "ExtractAll" also "Extract" in einer Schleife auf.
...
Ich würde sagen, mit "Syste.Zip.TZipFile.ExtractZipFile" ist ein Abbrechen nicht möglich.
Sieht so aus. Danke für eure Antworten!
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.524 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Zip-Archiv entpacken

  Alt 12. Jan 2020, 15:51
Da wir schon beim Entzippen sind. Kann das nun integrierte Zippen/Entzippen auch in einen Stream entzippen?
Ich habe noch Delphizip im Einsatz. Dort steht aber, das die aus Gesundheitsgründen nicht mehr weiterentwicklelt wird.
Daher suche ich nach einer Alternative in Zukunft. Wenn das schon in Delphi integriert ist, wäre das meines Erachtens die beste Alternative.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf