1

JclCompression ライブラリを使用して、既存のアーカイブにファイルを追加しようとしています。残念ながら、archive.compress以下の関数で が呼び出されると、元のアーカイブが削除され、追加しようとしている単一の圧縮ファイルのみを含む (同じファイル名の) アーカイブに置き換えられます。元のファイルはすべて削除されました。

function TMyCompression.AddZipItems(const archiveFileName: string; const itemsToZip: TList<TMyCompressionItem>): boolean;
var
  archive: TJclUpdateArchive;
  archiveClass: TJclUpdateArchiveClass;
  packedItemName : string;
  i: Integer;
begin
  archiveClass := GetArchiveFormats.FindUpdateFormat(archiveFileName);
  archive := archiveClass.Create(archiveFileName);
  if NOT Assigned(archive) then
    Result := FALSE
  else
    try
      for i := 0 to itemsToZip.Count -1 do
        begin
          packedItemName := RootPath(itemsToZip[i].Name);
          if itemsToZip[i].IsDirectory then
            archive.AddDirectory(packedItemName, itemsToZip[i].Name, true, true)
          else
            archive.AddFile(packedItemName, itemsToZip[i].Name);
        end;
      archive.Compress;
    finally
      archive.Free;
    end;
 end;

JclCompression ツールでこれを達成する方法はありますか?

編集:

コードに影響を与えなかったいくつかの内部関数呼び出しを削除しました。

私が試して拒否したその他の Delphi 圧縮ツール:

  • Delphi XE の内部 System.Zip。進行状況やフィードバックのフックはありません。

  • TurboPower 略語 v5; 私はこのツールを古い zip32 圧縮で何十年も使用してきました。ただし、現在は zip64 のサポートが必要であり、最新バージョンは最初の 2 つの 4GB を超えるファイルで失敗しました (思い出すと、無効なブロック サイズでした)。どちらのファイルも 7-zip と Windows ファイル エクスプローラーで開くことができました。

  • Windows ファイル エクスプローラーが使用する内部 zip ツールへのシェル。6 GB の圧縮ファイルを一晩実行させましたが、朝に戻ったとき、まだ 20 時間かかると報告されていました。

7-Zip は非常に高速で、優れたフィードバックを提供し、徹底的に実行およびテストされています。

4

1 に答える 1