2012-03-03 20 views
6

¿Cómo puedo obtener la ruta al directorio de inicio del Usuario actual?Cómo obtener el directorio de inicio del usuario actual en Windows

Ej: En Windows, si el usuario actual es "invitado" Necesito "C: \ Users \ Guest"

Mi aplicación se ejecutará en la mayoría de las versiones de Windows (XP, Vista, Win 7).

+1

¿Está buscando la ruta actual, o directorio principal? Por favor, haga un esfuerzo para hacer su pregunta (y redactarla/deletrearla correctamente) si desea que los demás se esfuercen por ayudarlo. –

+0

Me disculpo. Necesito obtener la ruta del usuario. En Windows 7, cada usuario registrado tiene una cuenta en la carpeta "usuarios". Si mi cuenta de inicio de sesión es HPFE, necesito obtener la ruta "C: \ users \ hpfe". – Ullan

Respuesta

11

Utilice la función SHGetFolderPath. Esta función es preferible a las variables de entorno de consulta, ya que esta última se puede modificar para que apunte a una ubicación incorrecta. La documentación contiene un ejemplo, que repito aquí (un poco ajustada):

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

// ..... 

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

dulce, no sabía acerca de esto. – scibuff

+0

quiere decir, la ubicación del usuario se puede configurar en cualquier ubicación? – Ullan

+0

Gracias por la mejor solución. – Ullan

5

sólo tiene que utilizar las variables de entorno, en este caso en particular que desea %HOMEPATH% y combinar eso con %SystemDrive%

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

+1

¿Hay alguna posibilidad, System Drive puede ser "C:" y HomePath puede ser E: \ Users \ {username} – Ullan

+0

posiblemente - http://lifehacker.com/5467758/move-the-users-directory-in-windows -7 - pero eso sería solo un "simlink" así que C: \ Usuarios apuntarían a E: \ Users para que la ruta se resuelva de todos modos – scibuff

+0

Gracias. Esta solución rápida resolverá mi problema – Ullan

1

he utilizado% USERPROFILE% al obtener la ruta de directorio personal del usuario actual.

0

Enfoque 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; 
    } 
} 

Enfoque 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; 
} 
+0

¿Podría explicar brevemente la diferencia entre los dos, por favor? –

Cuestiones relacionadas