Archiv — ZIP, TAR, RAR, ISO
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
