Ressourcen laden plattformunabhängig



  • Hallo zusammen,
    Ich weiß nicht, ob es hier passt, aber ich hoffe es mal 😉
    Es geht um folgendes:
    Ich würde gerne wissen, wie man Ressourcen plattformunabhängig laden kann.
    Also zum Beispiel ich habe ein Programm geschrieben, welches z.B. ein Bild und ein Config-File lädt.
    Wenn ich das Programm unter Linux nutzte werden Ressourcen ja an folgenden orten gespeichert:
    Mein Programm: /usr/bin/
    Programm-Dateien (z.B. das besagte Bild): /usr/share/
    Konfigurationen (User abhängig): /home/username/.programm/

    Wenn es sich bei Windows nicht geändert hat seit XP (letzte von mir benutzte Version), werden alle Dateien immer noch in C:\\Programme\meinProgramm\ gespeichert.

    Also frage ich mich, wie macht man so was?
    Oder löst man so etwas durch z.B. #ifdef (also Plattform-abhängige Pfade angeben und per defines lösen).

    Danke 🙂



  • Offen gesagt speichere ich Einstellungen immer einfach im Programmordner, was ich auch als User sehr angenehm finde. (Nur leider machen das kaum Leute.) Ansonsten helfen da tatsächlich nur #ifdefs, eventuell in .cpp Dateien versteckt. (Denn zumindest unter Windows würde ich den Pfad nicht hart rein schreiben, sondern über eine API Funktion holen.)



  • cooky451 schrieb:

    Nur leider machen das kaum Leute.

    Oft finde ich das auch toll. Man sucht den Kram nicht lange, es wird nicht irgendwas anderes zugemüllt, und das Programm wird direkt "portable". Wenn ich unter Linux bei nem OS/PC-Wechsel allerdings einfach nur meinen Home-Ordner mitnehmen muss, und dann direkt alle Einstellungen wieder habe nachdem ich die entsprechenden Programme über die Paketverwaltung installiert habe, finde ich das auch extrem angenehm.



  • Das bedeutet aber auch, dass jeder Schreibrechte im Programm Ordner hat.

    Das will ich idR aber nicht. zB kann ein Virus so ganz einfach alle bestehenden Programme infizieren und sobald ein Admin so ein Programm dann ausfuehert wirds eklig.

    ne ne ne.

    Bitte richtig machen.



  • Vor allem wird es dadurch schwierig bis unmöglich, auf einem Mehrbenutzersystem unterschiedliche Konfigurationen pro Benutzer zu haben.



  • Ok danke 😃

    Ich habe es jetzt erst mal so gelöst:
    Ich habe in meinem Programm etwa vier Funktionen, welche auf Ressourcen zugreifen, zwei mal wird auf die Konfiguration zugegriffen und zwei mal auf Ressourcen wie Bilder und Sprachdateien.
    Für die Zugriffe auf die Konfiguration ist der Code der selbe:
    Pfad = Home()/.Programm
    Denke das ist auch unter Windows ok (Home ist unter Windows (so weit ich weiß ;)) "User\Dokumente und Einstellungen".

    Auf die anderen Ressourcen greife ich jetzt einfach zweimal verschieden zu, getrennt durch defines.
    Also

    #ifdef linuxPATHS
    Zugriff auf /usr/share/
    #else
    Zuriff auf den Programm Ordner
    #endif
    

    Das habe ich nicht mit ifdef _linux_ gemacht, weil manchmal will man auch unter Linux ein portables Programm 😉
    MfG



  • derFer schrieb:

    (Home ist unter Windows (so weit ich weiß ;)) "User\Dokumente und Einstellungen".

    Nein.
    %APPDATA%
    ist der korrekte Pfad.

    Home waere %USERPROFILE%
    Wenn der User die Daten selber auch finden koennen soll, zB weil es Replays, Savegames, etc. sind, wird oft %USERPOFILE%/Documents genommen.

    PS:
    unter os x waeren die Pfade
    ~/Library/Perferences
    bzw.
    ~/Library/Application Support



  • cooky451 schrieb:

    Offen gesagt speichere ich Einstellungen immer einfach im Programmordner, was ich auch als User sehr angenehm finde. (Nur leider machen das kaum Leute.)

    Dobi schrieb:

    cooky451 schrieb:

    Nur leider machen das kaum Leute.

    Oft finde ich das auch toll. Man sucht den Kram nicht lange, es wird nicht irgendwas anderes zugemüllt, und das Programm wird direkt "portable".

    Ich musste gerade nochmal auf das Datum eurer Antworten schauen. Sowas macht man doch seit 10 Jahren nicht mehr.



  • angenehm schrieb:

    Ich musste gerade nochmal auf das Datum eurer Antworten schauen. Sowas macht man doch seit 10 Jahren nicht mehr.

    Was ist das Problem dieser Vorgehensweise? Dass die Einstellungen nicht an einem zentralen Ort sind, und man sie für Backup oder PC-Wechsel mühsam zusammensuchen muss?

    Und wie macht man es denn heute unter Windows? %APPDATA% oder %USERPROFILE%/Documents? "Wenn der User die Daten selbst finden soll" scheint mir etwas vage zu sein...


  • Administrator

    Nexus schrieb:

    Was ist das Problem dieser Vorgehensweise?

    Wurde doch oben schon geschrieben:
    1. Schreibrechte
    2. Mehrbenutzersysteme -> Einstellungen und anderes für verschiedene Benutzer

    Nexus schrieb:

    Und wie macht man es denn heute unter Windows? %APPDATA% oder %USERPROFILE%/Documents? "Wenn der User die Daten selbst finden soll" scheint mir etwas vage zu sein...

    %APPDATA% sind für Einstellungen pro Benutzer
    %USERPROFILE%\Documents sind für die individuellen Dokumente des Benutzers (z.B. *.docx)

    http://msdn.microsoft.com/en-us/library/ms995853.aspx
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb762494.aspx
    http://www.microsoft.com/en-us/download/details.aspx?id=3859
    http://www.microsoft.com/en-us/download/details.aspx?id=22322

    Grüssli


Anmelden zum Antworten