AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein JEDI JCL Compression OnProgress wie verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

JEDI JCL Compression OnProgress wie verwenden

Ein Thema von Glados · begonnen am 21. Sep 2017 · letzter Beitrag vom 22. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
Glados
(Gast)

n/a Beiträge
 
#1

JEDI JCL Compression OnProgress wie verwenden

  Alt 21. Sep 2017, 20:42
Ich frage mich schon seit einer Ewigkeit wie man von den JEDI JCL-Komponenten einen richtig funktionierenden OnProgress-Event implementiert.
Mein Ziel ist ein Event bei welchem ich grob gesagt gucken kann, welche Datei gerade komprimiert wird und wenn der Vorgang fertig ist möchte ich das in einem Log festhalten.

Das Event hat folgende Kopfzeile
Delphi-Quellcode:

(Sender: TObject; const Value, MaxValue: Int64);

Wie verwendet man den Event richtig? Was muss ich mit Value und MaxValue machen, damit ich korrekt abfragen kann, wann eine Datei fertig komprimiert wurde? Ich bin leider eine
regelrechte Niete was Mathematik angeht und sehe hier nur chinesische Zeichen und einen Berg von Problemen vor mir.

Geändert von Glados (21. Sep 2017 um 20:56 Uhr)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#2

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 11:43
Darf man hier Beiträge wieder nach oben holen? Wenn nicht, bitte löschen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 12:08
Hab' die Teil noch nie benutzt.

Was steht denn in Value? MaxValue dürfte ja quasi das Ende sein.

Also mal 'ne Progressbar nehmen. Minimum auf 0, Maximum auf MaxValue und Position auf Value.
Tippe mal darauf, dass man damit (ohne Mathematik) 'nen Fortschrittsbalken bekommt, an dem man sehen kann, wieviel erledigt wurde und wieviel noch fehlt.

Je nach Typ der Progressbar, zeigt sie von alleine die Prozentangabe des Fortschrittes an.

Ansonsten Kettensatz oder Dreisatz:

?% = Value
MaxValue = 100%

Entspricht: ? = Value * 100 / MaxValue

Auf 'nem Label also:
Label.Caption := Format('%d von %d (%3.2f%%) erledigt.',[Value, MaxValue, Value * 100.00 / MaxValue]
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#4

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 12:16
Es geht mir nicht um die ProgressBar sondern viel mehr darum herauszufinden, wann eine Datei fertig verarbeitet wurde.

Value enthält soweit ich verstanden habe die Größe in Bytes der Daten, die schon verarbeitet wurden. MaxValue die Gesamtgröße.
Die Dateigröße jeder einzelnen Datei liegt mir vor und ich kann sie abfragen. Jetzt muss ich nur wissen wie ich mit Value und MaxValue + eventuellen ZwischenVariablen wie "OldValue" errechne, wann eine Datei fertig komprimiert wurde.

Beispiel
165 - 15 = 150
Value - Dateigröße = OldValue

Klingt einfach, funktioniert aber nicht.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 12:43
Der Vergleich Value = MaxValue sollte schon reichen. Ob die Datei dann aber auch schon wieder geschlossen ist, ist daraus nicht klar. Es kann also sein, dass die Komprimierung fertig ist, die Zieldatei aber noch gesperrt ist.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#6

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 12:44
MaxValue enthält aber die Größe in Bytes aller zu komprimierenden Dateien.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 12:54
Wenn in Value steht, wieviel Byte komprimiert wurden und MaxValue wieviel insgesamt zu komprimieren sind, sich aber beide Werte auf die Gesamtmenge und nicht die einzelne Datei beziehen, dann geht das einfach nicht.

Wenn Du weißt, in welcher Reihenfolge die Dateien komprimiert werden und Du die Größe der einzelnen Dateien weißt, dann kannst Du jeweils ausrechnen, welche Datei gerade "In Mache ist".

Sinngemäß sowas in der Art:
Delphi-Quellcode:
Summe := 0;
for i := 0 to Dateiliste.Count - 1 do begin
  Summe := Summe + Dateiliste[i].Dateigroesse;
  if Summe > Value then begin
    Label1.Caption := Format('zuletzt komprimierte Datei: %s (%d Byte)',[Dateiliste[i - 1].Dateiname,Dateiliste[i - 1].Dateigroesse]);
    Label2.Caption := Format('aktuell wird die Datei %s (%d Byte) komprimiert ...',[Dateiliste[i].Dateiname,Dateiliste[i].Dateigroesse]);
    break;
  end;
end;
Ob das performant und sinnvoll ist, sei erstmal dahingestellt.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#8

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 13:02
Zitat:
Wenn Du weißt, in welcher Reihenfolge die Dateien komprimiert werden und Du die Größe der einzelnen Dateien weißt, dann kannst Du jeweils ausrechnen, welche Datei gerade "In Mache ist".
Beides weiß ich.

Ich verstehe langsam nichts mehr.
Ein Testverzeichnis enthält 1800 Dateien. Alle 1800 werden komprimiert aber nur rund 600-700 (manchmal so manchmal so) werden vom obigen Code sowie von meinem erfasst.
In meiner Test-logdatei sind zu gefühlt 99% nur Dateien bis 50KB. Eine einzige Datei von 20MB wurde erfasst, der Rest > 50KB etwa nicht.

So wie es aussieht ist das JCLCompression OnProgress-Event einfach schlecht umgesetzt.

Geändert von Glados (22. Sep 2017 um 13:04 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 13:11
Protokolliere doch in dem Ereignis einfach mal nur Value und schaue, wie sich der Wert verändert.

Eventuell wird er ja nicht dateiabhängig aufgerufen, sondern mengenabhängig oder alle x% der Gesamtmenge oder alle y Byte. Dann muss das Ereignis nicht bei jeder Datei aufgerufen werden.

[EDIT]
Wenn man in die Sourcen schaut, kann man erkennen / erahnen, dass der Aufruf dieses Ereignisses von der zur Komprimierung genutzten packervariante abhängig ist. Die Häufigkeit des Aufrufes könnte also bei ZIP-Dateien vollkommen anders sein, als bei 7z ...

Geändert von nahpets (22. Sep 2017 um 13:20 Uhr) Grund: Text ergänzt
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#10

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 13:18
Zitat:
Protokolliere doch in dem Ereignis einfach mal nur Value und schaue, wie sich der Wert verändert.
Alles schon xfach durch

Value geht so lange hoch bis es MaxValue erreicht und dann ist der Vorgang beendet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz