如何获取当前用户目录?

用这个:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

我得到这个输出:

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

我怎样才能得到所有用户的根目录? 例如:

"C:\\Documents and Settings\\[USER]\\"
166422 次浏览

Try:

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

试试:

System.Environment.GetEnvironmentVariable("USERPROFILE");

编辑:

如果所使用的.NET 版本为4或以上,则可以使用 Environment.SpecialFolder枚举:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
Environment.GetEnvironmentVariable("userprofile")

尝试从命名的 SpecialFolder 导航很容易出现问题。有很多原因导致文件夹不在你期望的位置——用户可以自己移动它们,GPO 可以移动它们,文件夹重定向到 UNC 路径等等。

对用户配置文件使用 环境变量应该能够反映任何可能的问题。

也许这将是一个好的解决方案: 考虑到这是否是 Vista/Win7或 XP,而不使用环境变量:

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

不过使用环境变量更为明确。

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

你可使用以下代码:

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

更多信息见: 使用 c # 在 WinXP 和 winCE 中获取工作目录路径

您可以通过以下方式获得 UserProfile 路径:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

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

在研究 Environment.SpecialFolder枚举时也很有帮助。使用 LINQPad 或创建一个解决方案并执行以下代码:

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

这是我机器上的结果:

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

(“ fish”是我姓的前5个字母。这是用 Microsoft 帐户登录时分配的用户名。)