homedirectory feststellen
-
Hallo,
ich hoffe, dass ich hier im richtigen Unterforum bin, wenn nicht, bitte verschieben.
Ich habe folgendes Problemchen - ich möchte in meiner Applikation für Linux/Windows eine Parameterdatei wegschreiben - etwa Einstellungen und/oder Benutzereingaben, die beim erneuten Aufruf wieder vorhanden sein sollen. In Linux ist das recht einfach um ein schreibberechtigtes Verzeichnis herauszufinden:#include <unistd.h> #include <sys/types.h> #include <pwd.h> #include <stdio.h> #include <stdlib.h> int main(void) { const char *homedir; if ((homedir = getenv("HOME")) == NULL) { homedir = getpwuid(getuid())->pw_dir; } printf("%s\n",homedir); return 0; }
Lasse ich das unter Linux laufen, bekomme ich das Homeverzeichnis - nicht so unter Windows - dort bekomme ich mit dem selben Code "Hello world!" als Ergebnis....
Weiss jemand Rat?
Besten Dank im voraus!
-
Google!?
Siehe z.B. letzer Beitrag hier.
-
icarus2 schrieb:
Google!?
Siehe z.B. letzer Beitrag hier.
Besten Dank! Ich habe jetzt 2 Möglichkeiten gefunden:
#include <windows.h> #include <Shlobj.h> // #include <stdlib.h> #include <stdio.h> // int alt_homedir(void) { printf("\nalt_homedir\n\n"); printf("USERPROFILE = %s\n", getenv("USERPROFILE")); printf("HOMEDRIVE = %s\n", getenv("HOMEDRIVE")); printf("HOMEPATH = %s\n", getenv("HOMEPATH")); return 0; } int main(void) { char homeDirStr[128]; if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, homeDirStr))) { printf("%s\n",homeDirStr); } else { printf("Error"); } alt_homedir(); return 0; }
Welche ist besser? - Und - wo/wie schreibe ich das in Windows "mit gutem Stil" hin? In Linux wäre es eine Datei etwa wie
.anwendung
Sorry - aber ich bin leider kein Windowsexperte.....
-
Unter Windows solltest du besser in das APPDATA-Verzeichnis schreiben (das HomeDir ist eigentlich für den User selbst), s. How do I get the application data path in Windows using C++?.
-
Th69 schrieb:
Unter Windows solltest du besser in das APPDATA-Verzeichnis schreiben (das HomeDir ist eigentlich für den User selbst), s. How do I get the application data path in Windows using C++?.
Danke - aber das wars leider auch nicht, was ich suchte. Das "Zauberstatement" heisst wohl:
. . if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, homeDirStr))) { printf("%s\n",homeDirStr); } . .
Genau das gibt mir einen Folder zurück, der für userbezogene Daten gedacht ist - analog Linux.
Trotzdem besten Dank für die Denkanstösse.Wünsche noch einen schönen Vatertag