System.Zip.TZipFile.Extract

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

procedure Extract(const FileName: string; const Path: string = ''; CreateSubdirs: Boolean = True); overload;
procedure Extract(Index: Integer; const Path: string = ''; CreateSubdirs: Boolean = True); overload;

C++

void __fastcall Extract(const System::UnicodeString FileName, const System::UnicodeString Path = System::UnicodeString(), bool CreateSubdirs = true)/* overload */;
void __fastcall Extract(int Index, const System::UnicodeString Path = System::UnicodeString(), bool CreateSubdirs = true)/* overload */;

プロパティ

種類 可視性 ソース ユニット
procedure
function
public
System.Zip.pas
System.Zip.hpp
System.Zip TZipFile


説明

単一のファイルを、.zip アーカイブから抽出します。

  • FileName は、.zip ファイルから抽出するファイルを示します。.zip ファイル名内のすべてのスラッシュは、「/」でなければなりません。
  • Index は、.zip アーカイブにおけるこのファイルのインデックスを表します。
  • Path は、ファイルを抽出するディスク上の場所を表します。
  • CreateSubDirs は、.zip ファイル内で指定されるサブディレクトリを、出力が作成するべきかどうかを示します。CreateSubDirs のデフォルト値は True です。

第 2 オーバーロード プロシージャは、.zip ファイルに重複ファイル名があった場合に便利です。

抽出の進捗を追跡するには、OnProgress を使用します。

パスワード保護されたファイルの抽出

パスワード保護(暗号化)されたファイルを抽出するには、OnCreateDecompressStream イベントか CreateDecompressStreamCallBack コールバックを使用します。次の例では、OnCreateDecompressStream を使用して暗号化されたファイルを抽出する方法を示しています:

  1. OnCreateDecompressStream イベントを割り当て:
    Delphi:
    ...
      myZipFile := TZipFile.Create;
      myZipFile.OnCreateDecompressStream := OnCreateDecompressStream;
      try
        myZipFile.ExtractAll('');
        myZipFile.Close;
      finally
        myZipFile.Free;
      end;
    ...
    
    C++:
    ...
    	std::unique_ptr<TZipFile> myZipFile(new TZipFile);
    	myZipFile->OnCreateDecompressStream = OnCreateDecompressStream;
    	myZipFile->ExtractAll("../../");
    	myZipFile->Close();
    ...
    
  2. OnCreateDecompressStream 関数で復号化を実行:

    Delphi:

    • private セクションに定義を入れる:
        private
          { Private declarations }
          function OnCreateDecompressStream(const AInStream: TStream; const AZipFile: TZipFile;
            const AHeader: TZipHeader; AIsEncrypted: Boolean): TStream;
      
    • OnCreateDecompressStream 関数を実装:
      function TForm1.OnCreateDecompressStream(const AInStream: TStream; const AZipFile: TZipFile;
        const AHeader: TZipHeader; AIsEncrypted: Boolean): TStream;
      begin
        try
          if AIsEncrypted then
          begin
            // Perform decrypt operation on AInStream. For example, you can use your own implementation of CryptZip or AES-256. 
            // Result := DecryptedStream;
          end
          else
             Result := AInStream;
        except
          on E:Exception do
          begin
            Result := AInStream;
          end;
        end;
      end;
      
  3. C++:
    • .h ファイルに定義を入れる:
      private:	// User declarations
      	TStream* __fastcall OnCreateDecompressStream (TStream* const InStream, TZipFile* const ZipFile, const TZipHeader &Item, bool IsEncrypted);
      
    • OnCreateDecompressStream 関数を実装:
      TStream* __fastcall TForm2::OnCreateDecompressStream(TStream* const InStream, TZipFile* const ZipFile, const TZipHeader &Item, bool IsEncrypted)
      {
      	try
      	{
      		if (IsEncrypted)
      		{
      		 // Perform decrypt operation on AInStream. For example, you can use your own implementation of CryptZip or AES-256.
      		 // return DecryptedStream;
      		}
      		else
      		{
      			return InStream;
      		}
      	}
      	catch (Exception &e)
      	{
      		return InStream;
      	}
      }
      

関連項目