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.
[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
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.
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
[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.
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.
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