以下注册表项包含许多系统默认文件夹位置。
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders
在此处找到的所有用户桌面的路径值如下:
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资源管理器中使用复制并粘贴上述注册表值并按Enter键,则会转到实际文件夹。例如,如果您在Vista中的Windows资源管理器中粘贴[%PUBLIC%\ Desktop],则会转到[“C:\ Users \ Public \ Desktop”]。
我的问题是这个;如何使用C#程序重现此行为?更具体地说,如果我使用C#程序检索注册表值[%PUBLIC%\ Desktop],我可以轻松地将其转换为[“C:\ Users \ Public \ Desktop”]?显然我不是在寻找字符串替代品,我需要做Windows所做的事情。
答案 0 :(得分:2)
答案 1 :(得分:1)
查看Environment.SpecialFolder
如此使用:
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
答案 2 :(得分:1)
虽然Mark应该使用GetFolderPath
,但要复制您所询问的特定行为,您可以使用Environment.ExpandEnvironmentVariables()函数来转换字符串,如“%ALLUSERSPROFILE%\ Desktop”进入“C:\ Documents and Settings \ All Users \ Desktop”(或其他)
答案 3 :(得分:0)
谢谢各位回复。 然而,
Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
没有提供我需要的结果,因为它返回当前用户的桌面路径。
最后我发现我可以使用codeka建议的内容。此外,当检索注册表项时,它会自动调用该函数。
顺便说一下,我在.NET 4.0中听到他们为Environment.SpecialFolder添加了一个枚举,以便可以检索Common Desktop。