Seite 1 von 1
Pfad zum 'home'-Ordner
Verfasst: Di Okt 06, 2009 7:29 pm
von +Fuss+
Hallo,
es gibt mal wieder ein Problem auf das Google keine Lösung findet (oder ich bin zu dumm zum Suchen).
Ich arbeite an einem Programm das Einstellungen speichern muss. Beim Start sucht es die Datei, die im Order "/home/fuss/.programm/settings.tts" liegen soll.
Code: Alles auswählen
setting_file = fopen("/home/fuss/.programm/settings.tts", "r");
Da das Programm ja auch auf anderen PC's laufen soll, muss ich ja eine andere Möglichkeit finden an den Pfad/Namen des aktuellen Benutzers zu kommen, außer diesen direkt im Programmcode einzugeben. Unter Ubuntu funktioniert weder '~/' noch 'user'.
Gibt es da eine einfache Möglichkeit die ich einfach übersehen habe?
Muss man das aus den Parametern die bei Programmstart übergeben werden auslesen?
MfG Fuss
Re: Pfad zum 'home'-Ordner
Verfasst: Di Okt 06, 2009 7:47 pm
von nufan
Du kannst mit
getenv () die Umgebungsvariable auslesen.
Leider heißt die nicht überall gleich (z.B. Windows = HOMEPATH, Ubuntu = HOME). Qt hat bestimmte Funktionen um solche Pfade auszulesen. Vielleicht hat GTK+ auch so was (btw: Konsole oder GUI?).
Re: Pfad zum 'home'-Ordner
Verfasst: Di Okt 06, 2009 8:03 pm
von Xin
Ansonsten liefert Dir int main( int argc, char ** argv, char ** env ) ebenfalls die Enviromentvariablen.
Re: Pfad zum 'home'-Ordner
Verfasst: Mi Okt 07, 2009 4:26 pm
von +Fuss+
Danke,
mit getenv funktioniert das.
Wegen der Plattformunabhängigkeit hab ich einfach defines eingebaut:
Code: Alles auswählen
#ifdef WIN32
# define HOME "HOMEPATH"
#else
# define HOME "HOME"
#endif
Auf Ubuntu läuft es, wenn die defines richtig sind, dann müsste es auch auf Windows funktionieren...
Re: Pfad zum 'home'-Ordner
Verfasst: Mi Okt 07, 2009 4:46 pm
von Xin
+Fuss+ hat geschrieben:Wegen der Plattformunabhängigkeit hab ich einfach defines eingebaut:
afair __win32?
Interessante Form des Einrückens... hätte ich nicht gedacht, dass das so akzeptiert wird.
Re: Pfad zum 'home'-Ordner
Verfasst: Mi Okt 07, 2009 5:07 pm
von +Fuss+
Codeblocks hat nicht gemeckert und unter Ubuntu funktioniert es ja.
Wikipedia hat geschrieben:
Code: Alles auswählen
#ifdef WIN32
# include <windows.h>
#else
# include <unistd.h>
#endif
So steht es bei Wikipedia (war eine der ersten Seiten die Google ausgespuckt hat). Ich hab dann einfach das include durch define ersetzt.
Re: Pfad zum 'home'-Ordner
Verfasst: Mi Okt 07, 2009 10:49 pm
von Kerli
Xin hat geschrieben:+Fuss+ hat geschrieben:Wegen der Plattformunabhängigkeit hab ich einfach defines eingebaut:
afair __win32?
Im Durchschnitt passt es

Es ist _WIN32. Dazu habe ich auch wieder meine
Lieblingsseite zu dem Thema gefunden. Im speziellen ist dort dann für hier der Teil zu den
Betriebssystemen interessant.
Xin hat geschrieben:
Interessante Form des Einrückens... hätte ich nicht gedacht, dass das so akzeptiert wird.
Laut dem Standard ist das auf jeden Fall erlaubt, und was ich mich erinnern kann hat bei mir das Einrücken vor der Raute schon zu Kompilerfehlern geführt (Ich glaub das war Visual Studio). Der gcc schluckt es jedenfalls kommentarlos und afair ist es auch laut Standard erlaubt.
Re: Pfad zum 'home'-Ordner
Verfasst: So Okt 11, 2009 9:44 pm
von Kerli
Da ich für meine Engine auch ein virtuelles Dateisystem verwenden werde habe ich mit
PhysFS beschäftigt. Dort gibt es eine Funktion 'PHYSFS_getUserDir' die das Verzeichnis des aktuelle Benutzers zurück gibt. Du kannst dir ja den
Quellcode anschauen wie es dort gelöst wurde. Soweit ich das gesehen habe, verwenden sie für jede Plattform spezifische Funktionen. Dort werden nämlich auch deutlich mehr Plattformen als Windows und Linux unterstützt...