AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ...
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von DieDolly · begonnen am 29. Apr 2023 · letzter Beitrag vom 9. Mai 2023
Antwort Antwort
Seite 6 von 6   « Erste     456   
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#51

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

  Alt 5. Mai 2023, 22:15
Auf die Schnelle konnte ich jetzt nicht herausfinden, wie man Dateien zu einem bereits bestehenden Archiv hinzufügt. Ist das in mormot auch implementiert?
Ja, einfach so:
Delphi-Quellcode:
var zipFileName: TFileName := MakePath([Executable.ProgramFilePath, 'TestDaten.7z']);
var isFileAvailable: Boolean := FileExists(zipFileName);
if isFileAvailable then
  libWriter := New7zWriter(zipFileName, fh7z)
else
  libWriter := New7zWriter(fh7z);
Auf das Speichern mit SaveToFile musst du warten, bis Arnaud meinen Request eingepflegt hat. Schaue einfach bei GitHub auf die Commits. Als Behelf für die Zwischenzeit:
Delphi-Quellcode:
if isFileAvailable then
begin
  var stream: TFileStream := TFileStream.Create(zipFileName, fmOpenWrite or fmShareDenyNone);
  try
    libWriter.SaveToStream(stream);
  finally
    stream.Free;
  end;
end
else
  libWriter.SaveToFile(zipFileName);
Bis bald...
Thomas

Geändert von mytbo ( 5. Mai 2023 um 22:38 Uhr) Grund: Alternative für SaveToFile hinzugefügt
  Mit Zitat antworten Zitat
mytbo

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

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

  Alt 9. Mai 2023, 21: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 21:47 Uhr) Grund: Benchmark-Werte hinzugefügt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 6   « Erste     456   


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 17:43 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