Am 23.09.2009 um 19:03 schrieb Chris Moeller:

Frage: kann man irgendwie beliebige Files fest in ein RB-Projekt einbinden und dann per FolderItem darauf zugreifen? Ich bekomme das erst mal nicht hin. Das FolderIem ist immer NIL.

Ja, das geht. Du musst einfach die Dateien per Drag&Drop in Dein Rb- Projekt importieren. Wenn Du das Projekt kompilierst, werden die Dateien in den Resources-Ordner im Programm-Paket kopiert. Ein FolderItem auf die Dateien kannst Du z. B. so erzeugen (für das Beispiel nennen wir Dein Programm "MyApp" und die gesuchte Datei "MyData.dat"):

dim f as FolderItem = App.ExecutableFile // f verweist auf MyApp.app/ Contents/MacOS/MyApp
f = f.parent.parent // f verweist jetzt auf MyApp.app/Contents
f = f.child("Resources").child("MyData.dat") // f verweist jetzt auf die gesuchte Datei


Du kannst das Ganze auch in eine kleine Hilfsmethode verpacken:

Function GetResource (Extends theApp as Application, resName as String) as FolderItem

// Die folgende Zeile bewirkt, dass das FolderItem auf den Resources- Ordner nur ein Mal, nämlich beim
// ersten Aufruf der Methode, erzeugt werden muss
static f as FolderItem = theApp.ExecutableFile.parent.parent.child ("Resources")

// Hier wird ein FolderItem auf die eigentliche Datei erstellt. Durch die if-Abfrage brauchst Du das zurückgegebene // FolderItem später im Programm nur noch auf 'nil' testen; den Test, ob die gesuchte Datei auch existiert, kannst Du
// dir dort dann sparen
dim g as FolderItem = f.child(resName)
if g.exists then
   return g
else
   return nil
end if

Exception err as NilObjectException
return nil
End Function


Um das obige Beispiel wieder aufzugreifen, hier noch ein Beispiel, wie Du die Hilfsmethode verwendest:

dim f as FolderItem = App.GetResource("MyData.dat")
if f Is nil then
   // ups, da ist wohl was schief gelaufen
else
   // was immer Du mit der Datei machen möchtest
end if


Ach ja, falls Du das Programm für verschiedene Plattformen kompilieren möchtest, musst Du die Zeile

static f as FolderItem ...

selbstverständlich für die verschiedenen Plattformen anpassen.


Gruß
Christian

----------------------------------------
Christian Dorn
realbasic {a} online.de

REALbasic 2009r3 Studio

iMac 3.06 GHz Intel Core 2 Duo, 4 GB RAM
PowerMac G5 2x2GHz, 1.5 GB RAM
Mac OS X 10.6.1

Ubuntu Linux 9.04 on Parallels Desktop 4.0
Kernel 2.6.28-15-generic
GNOME 2.26.1
----------------------------------------

Antwort per Email an