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 */;
Inhaltsverzeichnis
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ürCreateSubDirs
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:
- 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(); ...
- 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;
- Fügen Sie die Definition des private-Abschnitts ein:
- 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; } }
C++:
Siehe auch
- APPNOTE.TXT - .ZIP File Format Specification (EN) (weitere Informationen zu CryptoZip)