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 */;
Sommaire
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
procedure function |
public | System.Zip.pas System.Zip.hpp |
System.Zip | TZipFile |
Description
Extrait un seul fichier de l'archive .zip.
FileName
spécifie le fichier à extraire du fichier .zip. Toutes les barres obliques des noms de fichiers .zip doivent être '/'.
Index
représente l'index de ce fichier dans l'archive .zip.
Path
représente l'emplacement de l'extraction du fichier sur le disque.
CreateSubDirs
indique si la sortie doit créer des sous-directoires spécifiés dans le fichier .zip. La valeur par défaut deCreateSubDirs
est True.
La seconde procédure de surcharge est utile quand un fichier .zip a des noms de fichiers dupliqués.
Pour suivre la progression de l'extraction, utilisez OnProgress.
Extraction de fichiers protégés par mot de passe
Afin d'extraire des fichiers protégés par mot de passe (cryptés), vous pouvez utiliser l'événement OnCreateDecompressStream ou le rappel CreateDecompressStreamCallBack. L'exemple suivant montre comment utiliser OnCreateDecompressStream pour extraire un fichier crypté :
- Assignez l'événement 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(); ...
- Effectuez le décryptage dans votre fonction OnCreateDecompressStream :
Delphi :
- Incluez la définition dans la section private :
private { Private declarations } function OnCreateDecompressStream(const AInStream: TStream; const AZipFile: TZipFile; const AHeader: TZipHeader; AIsEncrypted: Boolean): TStream;
- Implémentez la fonction 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;
- Incluez la définition dans la section private :
- Incluez la définition dans votre fichier .h :
private: // User declarations TStream* __fastcall OnCreateDecompressStream (TStream* const InStream, TZipFile* const ZipFile, const TZipHeader &Item, bool IsEncrypted);
- Implémentez la fonction 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++ :
Voir aussi
- APPNOTE.TXT - .ZIP File Format Specification (EN) (informations supplémentaires concernant CryptoZip)