Kurzer Zwischenbericht von der Archiver-Front. Angefangen hatte ich mit dem ARJ, da dieser recht kompakt ist und ich den Quellcode schon vor einiger Zeit für ein besseres Verständnis etwas umformatiert hatte. Zuerst wollte ich ja nur die Fehlerausgaben präzisieren sowie auf lange Pfade umstellen. Ziemlich schnell merkte ich aber, dass in den Archiver eine Menge Einsparpotential bzgl. der Codezeilen liegt.
Die einzelnen Archivobjekte (ARJ, SQX, …) sind von einem allgemeinen Archivobjekt abgeleitet, das allgemeine Verwaltungsfunktionen (z.B. für Erstellung und Sortierung von Dateilisten) für alle Archiver implementiert. Die einzelnen Archivoperationen werden aber größtenteils von jedem Archiver selbst implementiert. Beim Hinzufügen von Dateien zu einem Standardarchiv sind das z.B. folgende Aufgaben:
- Logging starten
- Sichern der ZoneID des Archivs (falls vorhanden)
- Erstellen von Dateilisten
- Auflisten der im Archiv enthaltenen Dateien
- Erstellung einer neuen Archivdatei
- Kopieren des SFX-Stubs (falls vorhanden) in die neue Archivdatei
- Unberührte Dateien aus dem alten Archiv in das neue Archiv kopieren
- Neue Dateien in das neue Archiv komprimieren
- Altes Archiv löschen
- Neues Archiv auf den bisherigen Archivnamen umbenennen
- ZoneID des Archivs wiederherstellen (falls vorhanden)
- Optional einen erweiterten Vergleich zwischen originalen und komprimierten Daten durchführen (ZIP und SQX)
- Logging beenden
Wenn man sich die Liste so anschaut, dann sind eigentlich nur die Punkte 4 und 8 vom jeweiligen Archiver abhängig. Ähnliche Abläufe ergeben sich auch für alle anderen Archivfunktionen (z.B. Entpacken und Löschen).
Es lag also nahe, die grundlegenden Funktionen in das allgemeine Archiverobjekt zu stecken und nur die speziellen in das für das jeweilige Format zuständige. Die einzelnen Archiver-Dlls werden dadurch zwar nicht kleiner, allerdings sind die allgemeinen Funktionen nur noch einmal vorhanden. Das erleichtert die Codepflege und die Fehlerbehebung erheblich.
Mittlerweile bin mit ARJ, SQX und ZIP so ziemlich durch. Mit den anderen Archivern wird es jetzt vermutlich etwas einfacher werden, da die allgemeinen Funktionen jetzt alle implementiert sind.

Das hört man gerne. Schön, daß Du so gut voran kommst. Sind die von Dir vorgenommenen Änderungen eigentlich noch für eine SC12-Version gedacht oder arbeitest Du jetzt schon am SC 13 ?
Gruß Rolf