UnsupportedFormatExeption mit FolderItem

Hallo in die Runde.
Ich stehe gerade etwas auf dem Schlauch. Xojo wirft mir eine UnsupportedFormatExeption vor die Füße und ich weiß nicht wieso.

Hier könnt Ihr den Stand im Debugger sehen:
http://www.familienbande-genealogie.de/Test/UnsupportedFormatExeption.jpg

Ich erkenne da kein Problem.

Danke.

Gruß, Stefan Mettenbrink.

Child ist gedacht für Dateinamen. Spricht wenn Du Child mit “Franz-Josef.jpg” hast, dann ist das in Ordnung. Du hast aber in Child den ganzen Pfad. Was Du haben willst, ist

GetFolderItem(path, FolderItem.PathTypeNative)

Und bastele lieber an Pfaden nicht mit Replace(Pfad, “:”, “/”) herum. Das klappt nur für einfache Pfade.

+1

Ich würde sogar so weit gehen und sagen “mach das bitte nie” :wink:

[quote=307554:@Beatrix Willius]Child ist gedacht für Dateinamen. Spricht wenn Du Child mit “Franz-Josef.jpg” hast, dann ist das in Ordnung. Du hast aber in Child den ganzen Pfad. Was Du haben willst, ist

GetFolderItem(path, FolderItem.PathTypeNative)[/quote]

Oh, das hatte ich völlig übersehen. War wohl noch zu früh.
Vor ein paar Wochen hatte ich das Problem schon mal. War das Verhalten mit REALstudio seinerzeit anders? Es hat eigentlich immer funktioniert (sonst wäre es mir sicher schon eher aufgefallen).

[quote=307559:@Sascha S]+1
Ich würde sogar so weit gehen und sagen “mach das bitte nie” ;)[/quote]

Ja, da gebe ich Dir recht.
Da werde ich mir die Varianten in der FolderItem Klasse mal genauer ansehen müssen. Gibt es irgendwo gute Beispiele/Tipps zur systemunabhängigen Nutzung?

Bei mir ist es im Wesentlichen, dass ich Anwenderinformationen komplette Teile von Pfaden sichere und beim Laden der Anwenderdaten natürlich wieder die (Teil-) Pfade auch unter anderen Systemen nutzen möchte.
So gibt der Anwender einen Ordner vor, in dem sich seine Bilder befinden. Meine App merkt sich dann einmal den Pfad zum Bilderordner (in den eigenen Preferences) und danach nur noch die Teilpfad ab dem Bilderordner (das wird dann mit den Anwenderdaten gesichert). Wenn der Anwender nun an einen anderen Rechner geht hat meine App nun einen anderen Pfad für den Bilderordner, aber die Teilpfade aus der Anwenderdatei bleiben.

Insbesondere die Teilpfad können nun alle Varianten von Pfadtrennern enthalten.

Gruß, Stefan Mettenbrink.

Hallo Stefan,

Du kannst mit SpecialFolder arbeiten und die Pfad z.B. grundstzlich relativ zu SpecialFolder.Documents sichern.
SaveInfo sollte dann genau das tun, von dem Du sprichst. Systemunabhngig den Pfad speichern, vorausgesetzt Du arbeitest mit dem SpecialFolder.

z.B.:

Speichern:

dim f as folderitem = SpecialFolder.Documents.Child("myImages") Dim saveinfo as string = f.GetSaveInfo( SpecialFolder.Documents, folderitem.SaveInfoDefaultMode)

Auslesen:

dim f as FolderItem = SpecialFolder.Documents TextField1.Text = f.GetRelative(saveinfo).NativePath

Btw. Gru in die Nachbarschaft :wink:

Marius

[quote=308231:@Marius Dieter Noetzel]Du kannst mit SpecialFolder arbeiten und die Pfad z.B. grundsätzlich relativ zu SpecialFolder.Documents sichern.
SaveInfo sollte dann genau das tun, von dem Du sprichst. Systemunabhängig den Pfad speichern, vorausgesetzt Du arbeitest mit dem SpecialFolder.[/quote]

Sorry für die späte Antwort.
Ich überlasse dem Nutzer die Auswahl des Pfades. Damit ist nicht sichergestellt, dass SpecialFolder zum Einsatz kommen kann. Aber die Hinweise auf SaveInfoDefaultMode und GetRelative zeigen mir, dass ich mir die Möglichkeiten der FolterItem-Klasse noch mal genauer ansehen sollte.

Vielen Dank für die Hinweise!

Die Welt ist ein Dorf :slight_smile:

Gruß, Stefan Mettenbrink.

Moin Stefan,

nun hast Du mich verwirrt, wenn der Bilderordner sowieso auf jedem System überall liegen kann, dann musst Du doch rein garnichts Systemübergreifend speichern. Der Ordner ist auf jedem System anders, die Unterordner sind von Dir definiert und damit sowieso systemübergreifend nutzbar. Du hast ein Folderitem (z.B. myDataFolder)

Alles weitere sprichst Du dann über die Child-Klasse an.

myDataFolder.child(“images”).child(“preview”)
myDataFolder.child(“einstellungen”).child(“settings.db”)

Oder habe ich jetzt irgendwas so garnicht verstanden?

Marius

Hallo Marius,
ich gebe zu, ich habe hier wohl einen Sonderfall.
Es fngt schon damit an, dass es myDataFolder nicht gibt (oder nicht geben muss). Die Anwenderdaten knnen in einem vllig anderem Ordner liegen als der Ordner fr die Bilder. So knnen die Anwenderdaten z. B. auf einem Netzlaufwerk oder in einem Cloudverzeichnis liegen, die Bilder jedoch lokal auf der Platte.

Der Anwender gibt dem Programm (Ahnenforschung) einen Pfad fr Bilder und Dokumente vor. In diesem Ordner sind dann alle Dateien, die der Anwender einer Person zugewiesen hat. Leider gibt es Anwender, die innerhalb dieses Ordners eine eigene Struktur mit Unterordner anlegen. Deshalb merkt sich mein Programm fr die Personendaten nur den Pfad ab dem bereits bekannten Pfad fr Bilder und Dokumente (Restpfad).
Ich habe also bei Zugriff auf eine Datei immer den Bilderpfad+Restpfad+Dateiname zu einem kompletten Zugriffspfad zusammen zu stckeln. Bei Programmstart wird als erstes geprft, ob der Pfad fr die Bilder noch passt und ggf. den Anwender nach diesem Pfad gefragt. Damit ist ein Umzug auf einen anderen Rechner eigentlich weitestgehend problemlos

Ich hoffe, das erklrt die Problemstellung ein wenig und zeigt, dass ich dadurch auch, dass ich hier einen Systemunabhngigen Pad sichern muss.
Wie ich dass ohne Konvertierung der Pfadtrenner machen soll wei ich noch nicht. Vermutlich ist es das Beste, ich sichere den Restpfad mit immer demselben Trenner und hangel mich dann mit NthField per .Child duch die Hirarchie.
Im Groben etwa so:

f=GetFolderItem(Bildfad)
for i=1 to CountFields(Restpfad,"/")
f=f.Child(NthFieldRestpfad,"/",i))
if f=nil then exit
next

Oder gibt es eine bessere Lsung?

Gru, Stefan Mettenbrink.