SpeedCommander 12.30 ist fertig und kann ab sofort heruntergeladen werden. Neue Funktionen und behobene Fehler sind im Anwenderforum aufgelistet. Die Zahlen in den eckigen Klammern am Ende jeder Zeile kennzeichnen den entsprechenden Eintrag im TFS, der mir damit auch die jeweiligen Änderungen im Quellcode anzeigen kann. Sofern die Fehler und Anregungen im Forum berichtet wurden, kann man in der Forumssuche auch gezielt nach diesen Werten suchen.
Es geht voran
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.
Archiver
In der nächsten Zeit wird es hier im Blog wahrscheinlich etwas ruhiger werden. Grund dafür sind größere Umbauarbeiten am Server an den Archivern, die sehr arbeitsintensiv sind und wohl auch einige Zeit dauern werden. Im Mittelpunkt steht die Unterstützung von langen Dateinamen (bis zu 32000 Zeichen) beim Entpacken und Komprimieren.
Ein weiterer Schwerpunkt sind die Fehlermeldungen. Rainer hat damals mit Vorliebe den Universalfehler “Zugriff verweigert” verwendet, wenn es beim Öffnen oder Erstellen einer Datei ein Problem gab. Nach der Umstellung meiner Projektstruktur wollte ich z.B. ein Installations-SFX erzeugen, als Fehlermeldung wurde nur “Der Zugriff auf eine Datei wurde vom System verweigert.” angezeigt. Erst nach einer Debugsitzung war klar, dass der Archiver über den nicht mehr aktuellen Pfad der Symboldatei gestolpert war. Dem Anwender (und mir) wäre natürlich mehr geholfen, wenn bei der Fehlerausgabe der Name der Symboldatei zusammen mit der Fehlermeldung “Das System kann die angegebene Datei nicht finden.” stehen würde.
Bei dieser Gelegenheit werde ich auch gleich den Quellcode an meine Vorlieben anpassen, sofern noch nicht geschehen. Das erleichtet das Verständnis für die eine oder andere Sache und hilft bei späteren Erweiterungen. Die Refactoring-Möglichkeiten von Visual Assist sind dabei eine große Hilfe.
15 Jahre
Heute vor 15 Jahren begann offiziell meine Selbständigkeit. Damals hatte keiner daran gedacht, dass mich das kleine Programm, das ich während des Studiums entwickelte, so lange durchs Leben begleiten würde. Und ein Ende ist im Moment auch nicht abzusehen.
Passend dazu gibt es im Betaforum eine neue öffentliche Betaversion (12.30.5475). Neu ist die Syntaxhervorhebung für PowerShell-Skripte in SpeedEdit. Einige kleine Fehler wurden auch wieder behoben.
