System.Zip.TZipFile.Extract
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 を使用して暗号化されたファイルを抽出する方法を示しています:
- 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(); ...
- 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;
- private セクションに定義を入れる:
- .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; } }
C++:
関連項目
- APPNOTE.TXT - .ZIP ファイル形式の仕様(CryptoZip に関する追加情報)