2012-03-03 27 views
6

Jak uzyskać ścieżkę do katalogu domowego bieżącego użytkownika?Jak uzyskać katalog domowy bieżącego użytkownika w systemie Windows?

Ex: W systemie Windows, jeśli bieżący użytkownik jest "gościem" muszę "C: \ Users \ gości"

Moja aplikacja będzie działać na większości wersji systemu Windows (XP, Vista, Win 7).

+1

Szukasz bieżącej ścieżce lub katalogu domowym? Proszę, zadaj sobie trochę trudu, aby zadać pytanie (i sformułować je poprawnie), jeśli chcesz, aby inni wkładali wiele wysiłku w pomoc. –

+0

Przepraszam. Muszę uzyskać ścieżkę użytkownika. W systemie Windows 7 każdy zalogowany użytkownik ma konto w folderze "użytkownicy". Jeśli moje konto logowania to HPFE, muszę uzyskać ścieżkę "C: \ users \ hpfe". – Ullan

Odpowiedz

11

Użyj funkcji SHGetFolderPath. Ta funkcja jest preferowana w stosunku do zmiennych środowiskowych zapytań, ponieważ ta ostatnia może zostać zmodyfikowana w celu wskazania niewłaściwej lokalizacji. Dokumentacja zawiera przykładowe, które powtarzam tutaj (nieco zmienione):

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

// ..... 

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

słodki, nie wiedziałem o tym. – scibuff

+0

masz na myśli, że lokalizacja użytkownika może zostać przypisana do dowolnej lokalizacji? – Ullan

+0

Dzięki za lepsze rozwiązanie. – Ullan

5

Wystarczy użyć zmiennych środowiskowych, w tym szczególnym przypadku, gdy chcesz %HOMEPATH% i połączyć to z %SystemDrive%

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

+1

Czy jest szansa, System Drive może być "C:", a HomePath może być E: \ Users \ {username} – Ullan

+0

możliwe - http://lifehacker.com/5467758/move-the-users-directory-in-windows -7 - ale to byłby po prostu "simlink", więc C: \ Users wskaże E: \ Users, więc ścieżka zostanie rozwiązana, tak czy inaczej – scibuff

+0

Dzięki. To szybkie rozwiązanie rozwiąże mój problem. – Ullan

1

użyłem% USERPROFILE%, aby uzyskać ścieżkę katalogu domowego bieżącego użytkownika.

0

Podejście 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; 
    } 
} 

Podejście 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

Czy możesz krótko wyjaśnić różnicę między tymi dwoma? –

Powiązane problemy