Archiv — ZIP, TAR, RAR, ISO

Zurück zur Unit-Übersicht

Vier Units zum Lesen und Schreiben gängiger Archiv- und Image-Formate. Alle sind vollständig in Lyx implementiert — keine externen Bibliotheken, außer std.zlib für die DEFLATE-Kompression in std.zip.

Units

Unit Lesen Schreiben Kompression Beschreibung
std.zip ja ja DEFLATE (automatisch) ZIP-Archive nach PKWARE APPNOTE; max. 4096 Einträge, kein ZIP64
std.tar ja ja keine TAR-Archive im POSIX ustar Format; mit std.zlib für .tar.gz kombinierbar
std.rar ja nur stored RAR5-Reader; komprimierte Einträge werden übersprungen (proprietärer Algorithmus)
std.iso ja ja keine ISO 9660 Level 1; Reader traversiert vollständigen Verzeichnisbaum, Writer erzeugt Flat-Root-Image

Format-Wahl

Ich will … Empfehlung
Dateien austauschen (Browser, Windows, Linux) std.zip — universell unterstützt
Backup oder Deployment-Archiv std.tar + std.zlib (.tar.gz)
Vorhandenes RAR-Archiv lesen std.rar — nur stored-Einträge
Bootfähiges CD/DVD/USB-Image bauen std.iso
Fremdes ISO-Image auslesen std.iso

Schnellstart

// ZIP: Datei hinzufügen und speichern
import std.zip;

var w: int64 := ZipWriterNew();
ZipWriterAdd(w, "README.txt"c as int64, "Hallo!"c as int64, 6);
ZipWriterSave(w, "archiv.zip"c as int64);
ZipWriterFree(w);

// TAR: Datei hinzufügen und speichern
import std.tar;

var w: int64 := TarWriterNew();
TarWriterAdd(w, "daten/log.txt"c as int64, "Inhalt\n"c as int64, 7);
TarWriterSave(w, "backup.tar"c as int64);
TarWriterFree(w);

// ISO: Image erstellen
import std.iso;

var w: int64 := IsoWriterNew();
IsoWriterAdd(w, "README.TXT"c as int64, "Lyx ISO"c as int64, 7);
IsoWriterSave(w, "image.iso"c as int64);
IsoWriterFree(w);

Gemeinsame Muster

Alle vier Units folgen dem gleichen Handle-basierten API-Muster:

Lesen:                          Schreiben:
  Open(path) → Handle             WriterNew() → Handle
  Count(handle)                   WriterAdd(handle, name, data, len)
  Name(handle, idx)               WriterSave(handle, path)
  Size(handle, idx)               WriterFree(handle)
  Read(handle, idx, buf, max)
  Find(handle, name)
  Close(handle)

Speicherverwaltung: Name() gibt immer einen internen Puffer zurück — nie free'n. Read() schreibt in einen vom Aufrufer allokierten Puffer. Close() / WriterFree() gibt alle internen Ressourcen frei.

Letzte Aktualisierung: 2026-06-13