2009-07-16 14 views
60

Korzystanie następująco:Jak mogę uzyskać bieżący katalog użytkownika?

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

uzyskać ten wynik:

"C:\\Documents and Settings\\[USER]\\Application Data" 

Jak mogę dostać katalog główny wszystkich użytkowników? tj:

"C:\\Documents and Settings\\[USER]\\" 
+1

Odpowiedź, której użyłem, została usunięta ... działa: Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData)) – juan

+1

Juan - to nie zawsze będzie działać - po prostu masz szczęście . –

+0

dlaczego tak jest? masz na myśli jak w vista? lub w XP nagle przestanie działać? – juan

Odpowiedz

34

Może być to będzie dobre rozwiązanie: ogarniając uwagę, czy jest to Vista/Win7 lub XP oraz bez stosowania zmiennych środowiskowych:

string path = Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName; 
if (Environment.OSVersion.Version.Major >= 6) { 
    path = Directory.GetParent(path).ToString(); 
} 

Choć użyciu zmiennej środowiskowej jest o wiele bardziej wyraźne.

3

Spróbuj:

System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/ 
+1

To nie zadziała w systemie Windows 7, i zakładam, że nie będzie działać na Vista. jeśli dobrze pamiętam strukturę folderów. Po 7, będziesz musiał przejść do 2 folderów nadrzędnych, ponieważ folder ApplicationData to \% userprofile% \ AppData \ Roaming \ –

+0

Zwraca "C: \ Users \ Fredrik \ AppData" na moim komputerze z Vistą (folder ApplicationData to " C: \ Users \ Fredrik \ AppData \ Roaming ") –

114

Spróbuj:

System.Environment.GetEnvironmentVariable("USERPROFILE"); 

Edit:

Jeśli wersja .NET używasz wynosi 4 lub wyżej, można użyć wyliczenie :

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 
+11

To naprawdę zły pomysł, aby polegać na zmiennych środowiskowych, aby podać ścieżki folderów. Istnieje zbyt wiele sposobów na zmianę tych zmiennych środowiskowych. Zalecany sposób to wyliczanie Environment.SpecialFolder. –

+1

Niestety, jak widać http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx, folder USERPROFILE nie znajduje się w tym wyliczeniu. – Thomas

+0

Środowisko.SpecjalneFolder jest zawarty w .NET 1.1, po prostu nie ma folderu "UserProfile" ... – Vini

4
Environment.GetEnvironmentVariable("userprofile") 

Próba nawigacji z określonego folderu specjalnego jest podatna na problemy. Istnieje wiele powodów, dla których foldery nie będą tam, gdzie ich oczekujesz - użytkownicy mogą przenosić je samodzielnie, GPO mogą je przenosić, przekierować foldery do ścieżek UNC itp.

Używanie environment variable dla profilu użytkownika powinno odzwierciedlać którykolwiek z tych możliwych problemów.

-3

można użyć następującego kodu:

if(Platform.Equals("WinCE")) 
{ 
    m_CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); 
} 
else if(Platform.Equals("Win32NT")) 
{ 
    m_CurrentPath = Directory.GetCurrentDirectory(); 
} 

więcej informacji patrz: Get Current Directory Path in both WinXP and WinCE with C#

+3

Jest to całkowicie nie na miejscu. Program OP pyta o bieżący folder _user_, a nie folder roboczy. – julealgon

12

można uzyskać ścieżkę UserProfile z tylko tym:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

-3
$env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\" 
+0

Spójrz na komentarze na pytanie. Nie dotyczy to wszystkich wersji systemu Windows. –

3

Również bardzo pomocny, gdy badają Environment.SpecialFolder enum. Użyj LINQPad lub stworzyć rozwiązanie i wykonać ten kod:

Enum.GetValues(typeof(Environment.SpecialFolder)) 
    .Cast<Environment.SpecialFolder>() 
    .Select(specialFolder => new 
    { 
     Name = specialFolder.ToString(), 
     Path = Environment.GetFolderPath(specialFolder) 
    }) 
    .OrderBy(item => item.Path.ToLower()) 

Folder Paths

To wynik na moim komputerze:

MyComputer 
LocalizedResources 
CommonOemLinks 
ProgramFiles   C:\Program Files (x86) 
ProgramFilesX86   C:\Program Files (x86) 
CommonProgramFiles  C:\Program Files (x86)\Common Files 
CommonProgramFilesX86 C:\Program Files (x86)\Common Files 
CommonApplicationData C:\ProgramData 
CommonStartMenu   C:\ProgramData\Microsoft\Windows\Start Menu 
CommonPrograms   C:\ProgramData\Microsoft\Windows\Start Menu\Programs 
CommonAdminTools  C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
CommonStartup   C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 
CommonTemplates   C:\ProgramData\Microsoft\Windows\Templates 
UserProfile    C:\Users\fisch 
LocalApplicationData C:\Users\fisch\AppData\Local 
CDBurning    C:\Users\fisch\AppData\Local\Microsoft\Windows\Burn\Burn 
History     C:\Users\fisch\AppData\Local\Microsoft\Windows\History 
InternetCache   C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCache 
Cookies     C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCookies 
ApplicationData   C:\Users\fisch\AppData\Roaming 
NetworkShortcuts  C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Network Shortcuts 
PrinterShortcuts  C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 
Recent     C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Recent 
SendTo     C:\Users\fisch\AppData\Roaming\Microsoft\Windows\SendTo 
StartMenu    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu 
Programs    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
AdminTools    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
Startup     C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
Templates    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Templates 
Desktop     C:\Users\fisch\Desktop 
DesktopDirectory  C:\Users\fisch\Desktop 
Favorites    C:\Users\fisch\Favorites 
MyMusic     C:\Users\fisch\Music 
MyDocuments    C:\Users\fisch\OneDrive\Documents 
MyDocuments    C:\Users\fisch\OneDrive\Documents 
MyPictures    C:\Users\fisch\OneDrive\Pictures 
MyVideos    C:\Users\fisch\Videos 
CommonDesktopDirectory C:\Users\Public\Desktop 
CommonDocuments   C:\Users\Public\Documents 
CommonMusic    C:\Users\Public\Music 
CommonPictures   C:\Users\Public\Pictures 
CommonVideos   C:\Users\Public\Videos 
Windows     C:\Windows 
Fonts     C:\Windows\Fonts 
Resources    C:\Windows\resources 
System     C:\Windows\system32 
SystemX86    C:\Windows\SysWoW64 

Btw."fisch" to pierwsze 5 liter mojego nazwiska (i jest niemieckim oznaczeniem "ryba"). Jest to nazwa użytkownika przypisana podczas logowania się przy użyciu konta Microsoft.

+0

Nie wiem, jak nigdy nie słyszałem o LINQPad, wypróbowałem to, to jest świetne, dzięki za polecenie. – TravisO

Powiązane problemy