System.Zip.TZipFile.Extract

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

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

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
procedure
function
public
System.Zip.pas
System.Zip.hpp
System.Zip TZipFile


Beschreibung

Extrahiert eine einzelne Datei aus dem ZIP-Archiv.

  • FileName gibt die Datei an, die aus der ZIP-Datei extrahiert werden soll. Für alle Schrägstriche in den ZIP-Dateinamen sollte das Zeichen "/" verwendet werden..
  • Index repräsentiert den Index dieser Datei im ZIP-Archiv.
  • Path repräsentiert das Verzeichnis auf dem Datenträger, in das die Datei extrahiert wird.
  • CreateSubDirs gibt an, ob die Ausgabe in der ZIP-Datei angegebene Unterverzeichnisse erstellen soll. Der Vorgabewert für CreateSubDirs ist True.

Die zweite überladene Prozedur ist hilfreich, wenn eine ZIP-Datei doppelte Dateinamen enthält.

Mit OnProgress können Sie den Fortschritt des Extrahierens verfolgen.

Extrahieren passwortgeschützter Dateien

Um passwortgeschützte (verschlüsselte) Dateien zu extrahieren, können Sie das OnCreateDecompressStream-Ereignis oder das CreateDecompressStreamCallBack-Callback verwenden. Das folgende Beispiel zeigt, wie OnCreateDecompressStream verwendet wird, um eine verschlüsselte datei zu extrahieren:

  1. Weisen Sie das OnCreateDecompressStream-Ereignis zu:
    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. Führen Sie eine Entschlüsselung in Ihrer OnCreateDecompressStream-Funktion aus:

    Delphi:

    • Fügen Sie die Definition des private-Abschnitts ein:
        private
          { Private declarations }
          function OnCreateDecompressStream(const AInStream: TStream; const AZipFile: TZipFile;
            const AHeader: TZipHeader; AIsEncrypted: Boolean): TStream;
      
    • Implementieren Sie die OnCreateDecompressStream-Funktion:
      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++:

    • Fügen Sie die Definition in Ihre .h-Datei ein:
      private:	// User declarations
      	TStream* __fastcall OnCreateDecompressStream (TStream* const InStream, TZipFile* const ZipFile, const TZipHeader &Item, bool IsEncrypted);
      
    • Implementieren Sie die OnCreateDecompressStream-Funktion:
      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;
      	}
      }
      

Siehe auch