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
Guido Eisenbeis

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

AW: Zip-Archiv entpacken

  Alt 9. Jan 2020, 16:07
Mit etwas mehr Eigeninitiative hättest du dein Problem selbst innerhalb kurzer Zeit lösen können.
Würdest du das bitte unterlassen? Das ist nicht hilfreich und du weißt doch gar nicht, wieviel Eigeninitiative ich schon reingesteckt habe!

Gefunden in 10 Sekunden mit Google mit "ShowZipProgress delphi".
Mehr ist es auch nicht wert, denn es funktioniert nicht! Zudem finde ich es auch herablassend, wie du mit mir sprichst. Irgendwer hat dir wohl weh getan, dass du so zornig bist. Aber ich war das nicht!

TZipFile.ExtractZipFile('F:\1\Test.zip', ['F:\1\2\', ShowZipProgress);
-> Ende des Entpackens ...
Ohne groß zu probieren, vielleicht ist es ja tatsächlich so einfach:
Delphi-Quellcode:
  TZipFile.ExtractZipFile('F:\1\Test.zip', 'F:\1\2\', ShowZipProgress);
  ShowMessage('Fertig!');// <- Ist der hier nicht fertig?
Btw. da Befehle nacheinander abgearbeitet werden, ist das Entpacken beendet, wenn
TZipFile.ExtractZipFile('F:\1\Test.zip', 'F:\1\2\', ShowZipProgress); ausgeführt wurde. Also da nach. Es ist also eindeutig klar, wann das Entpacken fertig ist.
Da war ich wohl blind, denn ihr habt alle Recht! 1 Problem gelöst! Vielen Dank!
  Mit Zitat antworten Zitat
Guido Eisenbeis

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

AW: Zip-Archiv entpacken

  Alt 9. Jan 2020, 16:24
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.
Folgende Infos zum Flackern der Progressanzeige:

Das Flackern kommt nicht von einem visuellen Darstellungs-Problem, sondern dadurch dass es für jede einzelne Datei ganz vorne anfängt und bis zum Ende der Progressbar läuft, dann fängt die nächste Datei wieder vorne an, und läuft bis ans Ende. Wenn ein Zip-Archiv z. B. 7.400 Dateien enthält, dann passiert das 7.400 mal ==> also flackerts.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: Zip-Archiv entpacken

  Alt 9. Jan 2020, 16:44
Zitat:
7.400 Dateien enthält, dann passiert das 7.400 mal ==> also flackerts.
Eigentlich dürfte das kein Problem sein wenn du die Menge an Dateien im Archiv vorher ermitteln kannst.
Richte deine Progress-bar Max dementsprechend aus.
Es zwingt dich dann niemand immer wieder von vorne zu beginnen.
  Mit Zitat antworten Zitat
hoika

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

AW: Zip-Archiv entpacken

  Alt 9. Jan 2020, 16:55
Hallo,
ich kenne TZipFile ja nicht, aber

Bekommst Du die Anzahl der Dateien raus ?
Dann kannst Du ja Gesamt-Dateigrößen über
property FileInfo[Index: Integer]: TZipHeader
ermitteln.

Ich habe aber keine FileCount gefunden, muss es aber doch geben, oder ?

Danach kannst Du im ProgressEvent ja dann komplett hochzählen lassen,
also eine eigene Variable, die mit Hilfe von Position hochzählt.

PS:
laut dem hier gibt es FileCount
http://delphiblog.twodesk.com/native...-in-delphi-xe2
property FileCount: Integer; //total number of files in the zip file
Heiko

Geändert von hoika ( 9. Jan 2020 um 16:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Zip-Archiv entpacken

  Alt 9. Jan 2020, 16:57
Woher soll ich wissen, was du schon probiert hast oder nicht?

Hättest du geschrieben: "Hier habe ich den und den Quellcode gefunden. Der funktioniert aber bei mir nicht. Es kommt die und die Fehlermeldung beim Kompilieren/Ausführen", dann hätte man zum einem gesehen, dass du dich schon selbst um das Problem gekümmert hast, das kommt immer gut an, und man hätte eine Grundlage für die weitere Hilfe gehabt.

So hast du uns zwei Codeschnippsel gegeben und gesagt "ich will". Das hat bei mir etwas Unmut ausgelöst. Entschuldige bitte.

Es flackert nicht, die Fortschrittsanzeige fängt nur für jede Datei von vorne an. Du willst aber anscheinend den Gesamtfortschritt. Dazu musst du die Endgröße ermitteln und den jeweiligen Einzelfortschritt merken und aufsummieren. Also noch etwas drumrum basteln. Es wird also vorher erforderlich sein vorher in einer Schleife die Größe aller Dateien zusammen zu ermitteln.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#6

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
 
#7

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

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

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
 
#9

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

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

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
Antwort Antwort

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 13:06 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