以下registry项包含许多系统默认文件夹位置。
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders
所有用户桌面的path的值在那里find,如下所示:
XP or earlier : [%ALLUSERSPROFILE%\Desktop] Vista or later: [%PUBLIC%\Desktop]
而所有用户桌面的实际path分别如下:
XP or earlier : "C:\Documents and Settings\All Users\Desktop" Vista or later: "C:\Users\Public\Desktop"
现在,如果您在Windows资源pipe理器中使用复制并粘贴上述registry值,然后按Enter键,则会将您带到实际的文件夹中。 例如,如果将[%PUBLIC%\ Desktop]粘贴到Vista中的Windows资源pipe理器中,它会将您带到[“C:\ Users \ Public \ Desktop”]。
我的问题是这个; 如何从C#程序中重现此行为? 更具体地说,如果我从C#程序中获取registry值[%PUBLIC%\ Desktop],我可以轻松地做到这一点,我该如何将它转换为[“C:\ Users \ Public \ Desktop”]? 显然,我不是在寻找一个stringreplace,我需要做的是Windows的工作。
通过使用GetFolderPath获取parh名称
看看这样使用Environment.SpecialFolder
:
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
虽然你应该像Mark所说的那样使用GetFolderPath
,为了复制你所要求的特定行为,你可以使用Environment.ExpandEnvironmentVariables()函数将一个像“%ALLUSERSPROFILE%\ Desktop”这样的字符串变成“C:\ Documents”设置\所有用户\桌面“(或其他)
感谢球员的答复。 然而,
Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
不会给我我需要的结果,因为它返回当前用户的桌面路径。
最后我发现我可以使用什么codeka建议。 另外,当检索注册表项时,它会自动调用该函数。
顺便说一句,我听说在.NET 4.0中,他们已经添加了一个枚举到Environment.SpecialFolder,以便可以检索Common Desktop。