|
Du bist hier:
Hinterkattentuffel -
Ruby -
Windows virtuelles Dateisystem Prev: Windows Objekte nutzen |
|
Um mit den Windows-Richtlinien konform zu sein, müssen sich Programme an eine Reihe von Dingen halten. Manches davon ist im Hinblick auf die grandiose Unordnung in frühen Windows-Versionen entstanden. Öffnen wir nun also Ruby die Türen zum virtuellen Dateisystem mit seinen Spezialordnern. Es geht dabei nicht nur allgemein bekannte Ordner wie "Eigene Dateien". Auch Installationspfade, Temporärverzeichnisse und diverse andere Pfade sind unter Windows standardisiert. Nur wenig davon lässt sich bequem aus Umgebungsvariablen oder der Windows Registry ermitteln. Eine erweiterte Version der WinShell winshell_0.2.rb.txt kennt die symbolischen Namen diverser Spezialordner und ordnet ihnen die in der API zum Ole-Objekt Shell verwendeten Ids zu. Die Zuordnung landet bei der über new automatisch aufgerufenen Initialisierung als Hash in einer Instanzvariable. Der Rest ist ein Mix aus normalem Rubycode und der Schnittstelle der verwendeten OLE-Objekte. Nicht jeder Ordner ist auf jedem System vorhanden, also muss man beim Aufruf einiger Methoden etwas Vorsicht walten lassen. Am Ende der Datei wird Anhand zweier Beispiele gezeigt, was die Klasse leistet. Wer sich, was ja der Sinn bei einem Tutorial ist, etwas genauer mit dem Code beschäftigt hat, ist vielleicht bei der Pfadberechnung für die Special Folders in's Schleudern geraten. Warum ist das so kompliziert? Nun, im Grunde muss man zwei Dinge beachten:
Das erklärt die Spezialbehandlung des Desktop in der Klasse WinShell. Die Pfadberechnung ist unter Windows 2000 und Windows XP getestet. Mein erster, unter Windows 200 entwickelter Wurf (hier nicht wiedergegeben), hatte unter XP noch einige Problemchen. Unter Vista liefert das Progrämmchen Unfug. Der berechnete Pfad enthält dort die dem Dateisystem unbekannten deutschen Bezeichner. Und er ist gelegentlich auch noch in sich falsch, zum Beispiel bei C:/Benutzer/sascha/sascha/Bilder für den Schlüssel MYPICTURES. Lösung folgt. Wer mit Ruby speziell für Windows programmiert, wir die win32-utils nützlich finden. Einen sehr einfachen Zugriff auf das virtuelle Dateisystem realisiert das Utility win32-dir:
require 'win32/dir'
Dir.constants.sort.each { |symbol|
value = Dir.const_get symbol
puts "#{symbol} => #{value}" if value.class == String
}
Das Codeschnipsel lädt die unter Windows typischerweise installierte Bibliothek win32-dir und gibt alle String-Konstanten der Klasse Dir aus. Hier macht sich die Dynamik von Ruby bemerkbar: win32-dir ergänzt nämlich diverse Konstanten. Unter anderem Dir::MYPICTURES. Wer plattformübergreifende Software erstellen will, sollte den Aufruf allerdings immer noch so kapseln, dass er auf allen Plattformen funktioniert: winshell.rb. |
| Next: Externe Programme starten |