Einzelnen Beitrag anzeigen

mytbo

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

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

  Alt 9. Mai 2023, 22:44
Mit mORMot Commit 5431 (c87fb80) funktioniert auch SaveToFile wie es soll:
Delphi-Quellcode:
procedure SaveFolderTo7Zip(const pmcFolder, pmcZipFileName: TFileName;
  const pmcZipInternalDir: TFileName = ''; const pmcFileMask: TFileName = '*';
  pmNewFile: Boolean = False; const pmOnProgress: T7zProgressCallback = Nil);
var
  libWriter: I7zWriter;
begin
  if not pmNewFile
    and FileExists(pmcZipFileName) then
  begin
    libWriter := New7zWriter(pmcZipFileName, fh7z)
  end
  else
    libWriter := New7zWriter(fh7z);

  libWriter.SetCompressionLevel(3);
  if Assigned(pmOnProgress) then
    libWriter.SetProgressCallback(pmOnProgress);

  libWriter.AddFiles(pmcFolder, pmcZipInternalDir, pmcFileMask, True);
  libWriter.SaveToFile(pmcZipFileName);
end;

var
  zipFileName: TFileName;
begin
  zipFileName := MakePath([Executable.ProgramFilePath, 'TestMultiData.7z']);
  var timer: TPrecisionTimer;
  timer.Start;
  SaveFolderTo7Zip('c:\mORMot2\src\', zipFileName, 'mORMot_2023-05-01', '*.pas;*.inc', {pmNewFile=}True);
  SaveFolderTo7Zip('c:\mORMot2\src\', zipFileName, 'mORMot_2023-05-02', '*.pas;*.inc');
  SaveFolderTo7Zip('c:\mORMot2\src\', zipFileName, 'mORMot_2023-05-03', '*.pas;*.inc');
  SaveFolderTo7Zip('c:\mORMot2\src\', zipFileName, 'mORMot_2023-05-04', '*.pas;*.inc');
  SaveFolderTo7Zip('c:\mORMot2\src\', zipFileName, 'mORMot_2023-05-05', '*.pas;*.inc');
  ShowMessage(timer.Stop);
end;
Die Größe der gepackten Datei ist ca. 15MB. Das Packen mit Kompressionslevel 3 dauert kleiner 5 Sekunden. Es ist ein guter Kompromiss. Mit Level 5 schrumpft die Größe um ca. 18%, dafür dauert das Packen Faktor 3,5 länger.

Bis bald...
Thomas

Geändert von mytbo ( 9. Mai 2023 um 22:47 Uhr) Grund: Benchmark-Werte hinzugefügt
  Mit Zitat antworten Zitat