Pfad zum 'home'-Ordner

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Pfad zum 'home'-Ordner

Beitrag von +Fuss+ » Di Okt 06, 2009 7:29 pm

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

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Pfad zum 'home'-Ordner

Beitrag von nufan » Di Okt 06, 2009 7:47 pm

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?).

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pfad zum 'home'-Ordner

Beitrag von Xin » Di Okt 06, 2009 8:03 pm

Ansonsten liefert Dir int main( int argc, char ** argv, char ** env ) ebenfalls die Enviromentvariablen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: Pfad zum 'home'-Ordner

Beitrag von +Fuss+ » Mi Okt 07, 2009 4:26 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pfad zum 'home'-Ordner

Beitrag von Xin » Mi Okt 07, 2009 4:46 pm

+Fuss+ hat geschrieben:Wegen der Plattformunabhängigkeit hab ich einfach defines eingebaut:

Code: Alles auswählen

#ifdef	WIN32
afair __win32?
+Fuss+ hat geschrieben:

Code: Alles auswählen

#	define HOME "HOMEPATH"
Interessante Form des Einrückens... hätte ich nicht gedacht, dass das so akzeptiert wird.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: Pfad zum 'home'-Ordner

Beitrag von +Fuss+ » Mi Okt 07, 2009 5:07 pm

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.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Pfad zum 'home'-Ordner

Beitrag von Kerli » Mi Okt 07, 2009 10:49 pm

Xin hat geschrieben:
+Fuss+ hat geschrieben:Wegen der Plattformunabhängigkeit hab ich einfach defines eingebaut:

Code: Alles auswählen

#ifdef	WIN32
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:
+Fuss+ hat geschrieben:

Code: Alles auswählen

#	define HOME "HOMEPATH"
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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Pfad zum 'home'-Ordner

Beitrag von Kerli » So Okt 11, 2009 9:44 pm

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...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten