8 votes

Comment obtenir le répertoire d'origine de l'utilisateur actuel sous Windows ?

Comment puis-je obtenir le chemin d'accès au répertoire personnel de l'utilisateur actuel ?

Ex : Dans Windows, si l'utilisateur actuel est "guest", j'ai besoin de " C:\Users\guest "

Mon application fonctionnera sur la plupart des versions de Windows (XP, Vista, Win 7).

16voto

Philipp Points 21479

Utilisez la fonction SHGetFolderPath . Cette fonction est préférable à l'interrogation des variables d'environnement car ces dernières peuvent être modifiées pour pointer vers un mauvais emplacement. La documentation contient un exemple, que je répète ici (légèrement ajusté) :

#include <Shlobj.h>  // need to include definitions of constants

// .....

WCHAR path[MAX_PATH];
if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_PROFILE, NULL, 0, path))) {
  ...
}

4voto

scibuff Points 5796

Utilisez simplement les variables d'environnement, dans ce cas particulier vous voulez %HOMEPATH% et de le combiner avec %SystemDrive%

http://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows

4voto

Vasily Menshev Points 199

J'ai utilisé %USERPROFILE% pour obtenir le chemin du répertoire personnel de l'utilisateur actuel.

-2voto

Approche 1 :

#include <Shlobj.h>

std::string desktop_directory(bool path_w)
{
    if (path_w == true)
    {
        WCHAR path[MAX_PATH + 1];
        if (SHGetSpecialFolderPathW(HWND_DESKTOP, path, CSIDL_DESKTOPDIRECTORY, FALSE))
        {
            std::wstring ws(path);
            std::string str(ws.begin(), ws.end());
            return str;
        }
        else return NULL;
    }
}

Approche 2 :

#include <Shlobj.h>

LPSTR desktop_directory()
{
    static char path[MAX_PATH + 1];
    if (SHGetSpecialFolderPathA(HWND_DESKTOP, path, CSIDL_DESKTOPDIRECTORY, FALSE)) return path;
    else return NULL;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X