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 2 von 2     12   
nahpets
(Gast)

n/a Beiträge
 
#11

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 14:29
Das ist klar, aber ist Value immer 100 kb (oder sowas) größer oder irgendwie einfach nur "unstrukturiert" anders, aber auf jeden Fall höher?

Wenn das Ereignis nicht bei jeder Datei aufgerufen wird, kannst Du damit nicht protokollieren, wann eine Datei fertig gepackt wurde.

Ausgehend von den Quelltexten, dürfte das, was Du vorhast, mit dem Werkzeug nicht gehen, zumindest kann ich kein passendes Ereignis, Attribut ... finden.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#12

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 14:35
Doch das Event wird bei jeder Datei aufgerufen.

Das ganze Event scheint irgendwie kaputt zu sein denn ShowMessage((Sender as TJclCompressionArchive).CurrentItemIndex.ToString); gibt auch immer 0 zurück.
Grundlage für das Event ist übrigens TNotifyEvent.

Ich würde die .Compress;-Routine ja selber gerne einbauen statt die fertige von JCLCompression.pas zu nutzen aber ich kann sie einfach in der Datei nicht finden.

Ich habe gerade eine erstaunliche Entdeckung gemacht. Mein alter Code funktioniert komischerweise und sämtliche Dateien werden erfasst. Aber nur wenn ich die ZIP-Methoden verwende statt 7z.
Meine aktuelle Berechnung im Event ist
Delphi-Quellcode:
if ((Sender as TJclCompressionArchive).ItemCount > _globals.CurrentFileIndex) then
 begin
  _globals.FileSizeTmp := (Sender as TJclCompressionArchive).Items[_globals.CurrentFileIndex].FileSize;
  Inc(_globals.BytesCopied, Value - _globals.ValueOld);

 if ((_globals.BytesCopied - _globals.BytesCopiedTmp) >= _globals.FileSizeTmp) then
  Inc(_globals.CurrentFileIndex);

 _globals.ValueOld := Value;
end;
Funktioniert bei TJclZipCompressArchive wunderbar, bei TJcl7zCompressArchive nicht.

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

n/a Beiträge
 
#13

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 14:53
Wie ich bereits weiter oben vermutet hatte:

Der Aufruf der Routine ist nicht dateiabhängig, sondern von der Variante des genutzten Packers.

Wenn ZIP die Routine pro Datei aufruft, heißt das noch lange nicht, dass ein anderer Packer sich aus so verhalten muss.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#14

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 14:55
Ob das pro Datei einmal oder mehrmals aufgerufen wird weiß ich nicht.
Aber egal wie oft, die Berechnung müsste doch eigentlich jedes Szenario erfassen?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 15:18
Deine Ursprungsfrage lautet:
Zitat:
wann eine Datei fertig komprimiert wurde?
Wenn das Ereignis nicht pro Datei aufgerufen wird, kannst Du mit ihm auch nicht erfassen, wann eine Datei fertig komprimiert wurde.

Du könnstest allenfalls mit der oben skizzierten Routine einen Näherungswert ermitteln.

Wenn alle Dateien in einer Liste bekannt sind und vom Packer in der dort enthaltenen Reihenfolge gepackt werden, kannst Du per Summierung der bekannten Dateigröße und dem Vergleich mit Value ermitteln, welche Dateien bis zu diesem Zeitpunkt bereits gepackt wurden.
Wurden zwischen zwei Aufrufen des Ereignisses mehrere Dateine gepackt, so kannst Du nur feststellen, dass diese Dateien im Zeitraum zwischen den Ereignisaufrufen gepackt wurden. Aber einen genauen Zeitpunkt kannst Du nicht ermitteln.

Sofern die Packer in der gepackten Datei ein Verzeichnis vorhalten, dass das Komprimierdatum enthält, kannst Du diese Information nach dem Fertigstellen ermitteln.

Aber ansonsten sind es nur Näherungswerte, bei denen die Genauigkeit schlimmstenfalls gegen 0 tendiert oder inetwa die Genauigkeit des -lesens aufweisen.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#16

AW: JEDI JCL Compression OnProgress wie verwenden

  Alt 22. Sep 2017, 15:28
Zitat:
Wenn alle Dateien in einer Liste bekannt sind und vom Packer in der dort enthaltenen Reihenfolge gepackt werden, kannst Du per Summierung der bekannten Dateigröße und dem Vergleich mit Value ermitteln, welche Dateien bis zu diesem Zeitpunkt bereits gepackt wurden.
Das Problem ist, dass es sich hier nicht um eine for-Schleife handelt und CurrentIndex immer 0 ist.
Das heißt ich muss den Index (XYZ) selber erhöhen um auf DateiListe[XYZ] zuzugreifen.

Und hier funktioniert Summe := Summe + Dateigroesse nicht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:04 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