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 😉


Anmelden zum Antworten