AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Schwierigkeiten mit 7-zip und Events
Thema durchsuchen
Ansicht
Themen-Optionen

Schwierigkeiten mit 7-zip und Events

Ein Thema von a.def · begonnen am 5. Dez 2016 · letzter Beitrag vom 6. Dez 2016
Antwort Antwort
Seite 2 von 2     12   
a.def
(Gast)

n/a Beiträge
 
#11

AW: Schwierigkeiten mit 7-zip und Events

  Alt 6. Dez 2016, 10:45
Mein viel größeres Problem besteht darin festzustellen, wann eine Datei fertig komprimiert wurde. Dafür bietet JCL leider kein Event.
Meine behilfsmäßige Lösung ist sehr kompliziert und funktioniert nur bei größeren Dateien und das ist ja nicht Sinn der Sache
Sinn dahinter ist, dass ich zählen möchte wie viele Dateien vollständig komprimiert wurden + deren Dateigrößen möchte ich auch festhalten.
Mit einem vernünftigen Event wie "OnProgressFileFinished" oder so wär das alles kein Problem.

Delphi-Quellcode:
var
 iFileSizeOld, iFileSizeCompressed: Int64;
 iFilesCompressed, iCurrentItem: Integer;

procedure TForm1.JclCompressionArchiveProgress(Sender: TObject; const Value, MaxValue: Int64);
 function getPercent(const aBase, aValue: Extended): ShortInt;
 begin
  if (aValue > 0) and (aBase > 0) then
   Result := Trunc((aValue / aBase * 100) + 0.5)
  else
   Result := 0;
 end;

var
 iTmpPos, iTmp: Integer;
begin
 iTmpPos := getPercent(MaxValue, Value);
 if (iTmpPos <> ProgressBar1.Position) or (iTmpPos = ProgressBar1.Max) then
  begin
   if ((Sender as TJclCompressionArchive).ItemCount > iFilesCompressed) then
    begin
     ProgressBar1.Position := iTmpPos;
     iFileSizeOld := (Sender as TJclCompressionArchive).Items[iFilesCompressed].FileSize;
     iTmp := getPercent(iFileSizeOld, Value - iFileSizeCompressed);

     if iTmp >= 100 then // bei größeren Dateien kann man hier davon ausgehen, dass sie fertig komprimiert wurde
      begin
       inc(iFileSizeCompressed, iFileSizeOld);

       if iFilesCompressed < (Sender as TJclCompressionArchive).ItemCount then
        begin
         ShowMessage('Datei fertig');
         inc(iFilesCompressed);
        end;
      end;
    end;
  end;
end;
Edit
ich habe das Ganze jetzt mal etwas gekürzt und nun funktioniert es auch mit sehr kleinen Dateien (< 10 Byte etc).
Delphi-Quellcode:
var
 iFileCount, iFileSizeOld, iFileSizeCompressed: Int64;
 iFilesCompressed: Integer;

// ... Button der das Archiv erzeugt...
// ...
 iFileCount := 2; // Nur Dateien werden hier gezählt. Leere Verzeichnisse werden von JCL anders erstellt
 (aCompressArchive as TJclCompressArchive).AddFile('kleinedatei 1.txt', 'E:\7ztest\kleinedatei 1.txt');
 (aCompressArchive as TJclCompressArchive).AddFile('kleinedatei 2.txt', 'E:\7ztest\kleinedatei 2.txt');
// ...

procedure TForm1.JclCompressionArchiveProgress(Sender: TObject; const Value, MaxValue: Int64);
 function getPercent(const aBase, aValue: Extended): ShortInt;
 begin
  if (aValue > 0) and (aBase > 0) then
   Result := Trunc((aValue / aBase * 100) + 0.5)
  else
   Result := 0;
 end;

begin
 if (iFilesCompressed < iFileCount) then
  begin
   ProgressBar1.Position := getPercent(MaxValue, Value);
   iFileSizeOld := (Sender as TJclCompressionArchive).Items[iFilesCompressed].FileSize;
   if (Value >= (iFileSizeOld + iFileSizeCompressed)) then
    begin
     inc(iFilesCompressed);
     inc(iFileSizeCompressed, iFileSizeOld);
    end;
  end;
end;

Geändert von a.def ( 6. Dez 2016 um 19:07 Uhr)
  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 00:11 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