2010-05-18 9 views
1

以下注册表项包含许多系统默认文件夹位置。转换“用户外壳文件夹”注册表值

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Explorer中\用户文件夹壳

为所有用户的桌面,这是在那里发现的路径值,如下:

XP or earlier : [%ALLUSERSPROFILE%\Desktop] 
Vista or later: [%PUBLIC%\Desktop] 

尽管所有用户桌面的实际路径,分别如下:

XP or earlier : "C:\Documents and Settings\All Users\Desktop" 
Vista or later: "C:\Users\Public\Desktop" 

现在,如果你使用复制和粘贴在Windows上面的注册表值资源管理器和命中输入它会带你到实际的文件夹。例如,如果将[%PUBLIC%\ Desktop]粘贴到Vista的Windows资源管理器中,它会将您带到[“C:\ Users \ Public \ Desktop”]。

我的问题是这样的;如何从C#程序中重现此行为?更具体地说,如果我用一个C#程序检索注册表值[%PUBLIC%\ Desktop],我可以轻松地做到这一点,我该如何将它转换为[“C:\ Users \ Public \ Desktop”]?显然,我不是在寻找字符串替换,我需要做Windows的工作。

回答

1

退房Environment.SpecialFolder获取parh名称中使用像这样:

string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
1

虽然你应该使用GetFolderPath马克说,复制你问一下具体的行为,你可以使用Environment.ExpandEnvironmentVariables()函数将“%ALLUSERSPROFILE%\ Desktop”这样的字符串转换为“C:\ Documents and Settings \ All Users \ Desktop”(或其他)

0

Thanks guys fo答复。 然而,

Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 

不给我结果,我需要为它返回当前用户的桌面路径。

最后我想通了,我可以使用什么codeka建议。此外,当检索注册表项时,它会自动调用该函数。

顺便说一下,我听说在.NET 4.0中,他们已经向Environment.SpecialFolder添加了一个枚举,以便可以检索Common Desktop。