web-dev-qa-db-ja.com

Delphiの7-Zipを使用していますか?

Delphiの7-ZipDLLを使用したいのですが、適切なドキュメントや例を見つけることができませんでした。 Delphiの7-ZipDLLの使用方法を知っている人はいますか?

24

リリース1.102の時点で、 JEDIコードライブラリ7-Zip をサポートしています JclCompression ユニットに組み込まれています。ただし、まだ自分で使用したことはありません。

29
Oliver Giesen

多くのJEDIコードライブラリと同様に、Oliver Giesenの回答を拡張すると、適切なドキュメントが見つかりませんでしたが、これは私にとってはうまくいきます。

uses
   JclCompression;

procedure TfrmSevenZipTest.Button1Click(Sender: TObject);
const
   FILENAME = 'F:\temp\test.Zip';
var
   archiveclass: TJclDecompressArchiveClass;
   archive: TJclDecompressArchive;
   item: TJclCompressionItem;
   s: String;
   i: Integer;
begin
   archiveclass := GetArchiveFormats.FindDecompressFormat(FILENAME);

   if not Assigned(archiveclass) then
      raise Exception.Create('Could not determine the Format of ' + FILENAME);

   archive := archiveclass.Create(FILENAME);
   try
      if not (archive is TJclSevenZipDecompressArchive) then
         raise Exception.Create('This format is not handled by 7z.dll');

      archive.ListFiles;

      s := Format('test.Zip Item Count: %d'#13#10#13#10, [archive.ItemCount]);

      for i := 0 to archive.ItemCount - 1 do
      begin
         item := archive.Items[i];
         case item.Kind of
            ikFile:
               s := s + IntToStr(i+1) + ': ' + item.PackedName + #13#10;
            ikDirectory:
               s := s + IntToStr(i+1) + ': ' + item.PackedName + '\'#13#10;//'
         end;
      end;

      if archive.ItemCount > 0 then
      begin
//         archive.Items[0].Selected := true;
//         archive.ExtractSelected('F:\temp\test');

         archive.ExtractAll('F:\temp\test');
      end;

      ShowMessage(s);
   finally
      archive.Free;
   end;
end;
24
jasonpenny

Delphiは、XE2のTZipFileでネイティブのクロスプラットフォームZipをサポートするようになりました。

Delphi XE2およびFireMonkeyでTZipFileを使用してZipファイルを抽出する方法

4
Marcus Adams

DLLなしのZipおよび7z、概要を試してください: http://synopse.info/forum/viewtopic.php?pid=16

4
Kachwahed

Zipとunzipにのみ7Zipを使用する場合は、 TZip コンポーネントを確認してください。私は自分の目的のために小さなラッパーを作成しました。これは Zipper.pas ファイルにあります。自由に再利用してください。

1
Drejc

私は多くの解決策を試しましたが、問題がありました。これはうまくいきました。

ダウンロード https://github.com/zedalaye/d7Zip 7z.dllとsevenzip.pasをプロジェクトディレクトリにコピーし、sevenzip.pasをプロジェクトに追加します。

次に、これを使用して解凍できます。

using sevenzip;

procedure Unzip7zFile (zipFullFname:string);
  var
    outDir:string;
  begin
    with CreateInArchive(CLSID_CFormat7z) do
    begin  
      OpenFile(zipFullFname);
      outDir := ChangeFileExt(zipFullFname, '');
      ForceDirectories (outDir);
      ExtractTo(outDir);
    end;
  end;

使用法:

Unzip7zFile(ExtractFilePath(Application.ExeName) + 'STR_SI_FULL_1000420.7z');
0
Tone Škoda