Home » Tutorials » Datenspeicherung » Archivformate – RAR-Tutorial

Archivformate – RAR-Tutorial

Entpacken

Datei Flags

Die Bits 8-31 der Integers Flag sind reserviert. Die Bits 5,6 und 7 geben die Größe des Dictionary (wird nur intern verwendet) an. Interessant sind diese Bits nur wenn sie alle gesetzt sind – dies bedeutet das die Datei ein Verzeichnis darstellt. Wichtig sind die Bits 0-4:

  • Bit 0: Die Datei ist eine Fortsetzung aus einem vorangegangen Datenträger.
  • Bit 1: Die Datei wird auf dem nächsten Datenträger fortgesetzt.
  • Bit 2: Die Datei ist durch ein Passwort verschlüsselt.
  • Bit 3: Zu der gegebenen Datei ist ein Kommentar vorhanden.
  • Bit 4: Die Komprimierungsmethode der vorangegangen Dateien wird verwendet.

Um nun die Datei aus dem Archiv zu entnehmen oder einfach den Dateizeiger eine Datei weiter wandern zu lassen muss die Funktion RARProcessFile verwenden werden.

function RARProcessFile(hArcData: THandle; Operation: Integer; DestPath: PChar;
DestName: PChar): Integer;


hArcData ist das von RAROpenArchive zurückgelieferte Archivhandle.
Der Parameter Operation kann einen der folgenden Werte annehmen:

RAR_SKIP Bewegt den Dateizeiger auf die nächste Datei innerhalb des Archives.
RAR_TEST Testet die aktuelle Datei und setzt den Dateizeiger auf die nächste Datei innerhalb des Archives.
RAR_EXTRACT Entpacke eine Datei aus dem Archiv. Falls das Archiv nicht für das entpacken von Dateien geöffnet worden ist (also RAR_OM_LIST), dann ist RAR_EXTRACT aquivalent zu RAR_SKIP.


DestName und DestPath sind nur beim Dekomprimieren von Bedeutung. DestName gibt den Namen und Pfad der Zieldatei an. Nur wenn DestName Nil ist, kommt DestPath in Spiel. In diesem Fall wird der Dateiname aus dem Archiv entnommen und mit DestPath kombiniert. Sollte auch DestPath Nil sein, so wird der aktuelle Pfad zur Bildung der Zieldatei verwendet.
Wie oben beschreiben können Dateien durch ein Passwort gesichert werden. Mit Hilfe der Funktion RARSetPassword kann man der UnRAR Bibliothek das benötigte Passwort übergeben.

function RARSetChangeVolProc(hArcData: THandle; ChangeVolProc: TChangeVolProc);

Diese Funktion setzt eine benutzerdefinierte Funktion vom Typ TProcessDataProc voraus, die aufgerufen wird, sobald ein Datenträgerwechsel vorgenommen werden muss.

TChangeVolProc = function(ArcName: PChar; Mode: Integer): Integer;

ArcName bezeichnet den Namen des nächsten benötigen Datei. Mode ist entweder RAR_VOL_ASK oder RAR_VOL_NOTIFY.
Wenn Mode RAR_VOL_ASK ist, dann sollte ein Dialog mit der Aufforderung den neuen Datenträger einzulegen angezeigt werden. Die Funktion muss einen Wert ungleich Null zurück liefern, um der UnRAR Bibliothek mitzuteilen, dass ein neuer Versuch unternommen werden soll, das Archiv vom nächsten Datenträger aus fortzusetzen. Ein Rückgabewert von Null bedeutet Abbruch.

function RARSetProcessDataProc(hArcData: THandle;
  ProcessDataProc: TProcessDataProc);
TProcessDataProc = function(Addr: PByte; Size: Integer): Integer;

Diese Funktionen können zum Anzeigen des Fortschritts verwendet werden. Addr bezeichnet die Adresse, in der sich die unkomprimierten Daten befinden. Size ist die Größe der unkomprimierten Daten. Diese Funktion sollte einen Wert ungleich Null zurückgeben. Ein Rückgabewert von Null bedeutet Abbruch.
Zuguterletzt muss das Archiv wieder geschlossen werden.

RARCloseArchive(hArcData: THandle);