Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#34

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 1. Mai 2023, 14:53
Es funktioniert also nicht. Beide Bibliotheken haben dieselbenm Probleme.
Der Funktionsumfang der Bibliotheken 7z.dll, 7za.dll und 7zxa.dll unterscheidet sich erheblich. Auch die Möglichkeiten der einzelnen Kompressionsalgorithmen unterscheiden sich. Alles in allem eine große Anzahl an Kombinationen. Ein Blick in eine Beschreibung oder den Sourcecode erspart das Probieren. Die 7za.dll akzeptiert zum Beispiel für den CompressionLevel die Werte m7Copy, m7Lzma und m7Ppmd, aber nicht m7BZip2, m7Deflate und m7Deflate64. Die Exception Message "Falscher Parameter" weist darauf hin. Den ProgressCallback realisierst du wie folgt:
Delphi-Quellcode:
  ...
  private
    function ProgressCallback(const pmcSender: I7zArchive; pmCurrent, pmTotal: Int64): HRESULT;

function ...ProgressCallback(const pmcSender: I7zArchive; pmCurrent, pmTotal: Int64): HRESULT;
const
  STEP_WIDTH = 2;
var
  percentDone: Integer;
begin
  Result := S_OK;
  if pmCurrent = 0 then
  begin
    ProgressBar.Min := 0;
    ProgressBar.Max := 100;
    ProgressBar.Position := 0;
  end
  else if pmCurrent >= pmTotal then
    ProgressBar.Position := 0
  else
  begin
    percentDone := Trunc(pmCurrent / (pmTotal / 100));
    if (ProgressBar.Position + STEP_WIDTH) < percentDone then
      ProgressBar.Position := percentDone;
  end;
end;

var
  zipFileName: TFileName;
  libWriter: I7zWriter;
begin
  zipFileName := MakePath([Executable.ProgramFilePath, 'TestDaten.7z']);

  var timer: TPrecisionTimer;
  libWriter := New7zWriter(fh7z);
  libWriter.SetCompressionLevel(3);
  libWriter.SetProgressCallback(ProgressCallback);
  timer.Start;
  libWriter.AddFiles('c:\...\mORMot2\src\', '', '*', True);
  libWriter.SaveToFile(zipFileName);
  ShowMessage(timer.Stop);
Die Funktion MakePath([Executable.ProgramFilePath, 'TestDaten.7z']); macht das, was der Name sagt. Die mORMot Lösungen sind nur viel pragmatischer als die Delphi Bordmittel.

Bis bald...
Thomas
  Mit Zitat antworten Zitat