System.Zip.TZipFile.Extract

De RAD Studio API Documentation
Aller à : navigation, rechercher

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 */;

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 de CreateSubDirs 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é :

  1. 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();
    ...
    
  2. 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;
      
  3. C++ :

    • 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;
      	}
      }
      

Voir aussi