我怎样才能得到当前的用户目录?

使用这个:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

我得到这个输出:

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

我如何获得所有用户的根目录? 即:

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

可能这是一个很好的解决scheme:考虑到这是Vista / Win7或XP,而不使用环境variables:

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

虽然使用环境variables更清晰。

尝试:

 System.Environment.GetEnvironmentVariable("USERPROFILE"); 

编辑:

如果您使用的.NET版本是4或更高版本,则可以使用Environment.SpecialFolder枚举:

 Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 

你可以通过这个获得UserProfilepath:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

 Environment.GetEnvironmentVariable("userprofile") 

尝试从命名的SpecialFolder向上导航容易出现问题。 有很多原因,这些文件夹不会在您期望的位置 – 用户可以自行移动它们,GPO可以移动它们,文件夹redirect到UNCpath等。

对用户configuration文件使用环境variables应该反映任何这些可能的问题。

尝试:

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

在调查Environment.SpecialFolder枚举的同时也非常有帮助。 使用LINQPad或创build解决scheme并执行以下代码:

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

文件夹路径

这是我的机器上的结果:

 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 

顺便说一句。 “fisch”是我姓氏的前5个字母(德文是“fish”) 。 这是使用Microsoft帐户login时分配的用户名。

当有一个API来获取你想要的信息,调用SHGetSpecialFolderPath(...,CSIDL_PROFILE,...) ,环境variables或硬编码的父文件夹偏移量不是一个好主意SHGetSpecialFolderPath(...,CSIDL_PROFILE,...)

 $env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\" 

你可以使用下面的代码:

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

更多信息请参阅: 使用C#在WinXP和WinCE中获取当前目录path