====== Archiv — ZIP, TAR, RAR, ISO ======
→ [[lyx_-_programmiersprache:units|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 ^
| [[lyx_-_programmiersprache:units:zip|std.zip]] | ja | ja | DEFLATE (automatisch) | ZIP-Archive nach PKWARE APPNOTE; max. 4096 Einträge, kein ZIP64 |
| [[lyx_-_programmiersprache:units:tar|std.tar]] | ja | ja | keine | TAR-Archive im POSIX ustar Format; mit ''std.zlib'' für .tar.gz kombinierbar |
| [[lyx_-_programmiersprache:units:rar|std.rar]] | ja | — | nur stored | RAR5-Reader; komprimierte Einträge werden übersprungen (proprietärer Algorithmus) |
| [[lyx_-_programmiersprache:units:iso|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