Delphi-PRAXiS
Seite 6 von 6   « Erste     456   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ... (https://www.delphipraxis.net/212962-d7zip-sevenzip-pas-von-mail2nnv-fragen-zur-funktionsweise-dictionarysize.html)

mytbo 5. Mai 2023 22:15

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

Zitat von DieDolly (Beitrag 1522098)
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

mytbo 9. Mai 2023 21:44

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.
Seite 6 von 6   « Erste     456   

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