====== 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