所有用户路径?

时间:2009-12-14 18:01:02

标签: c++ winapi path

在C#中,我可以执行以下操作:

DirectoryInfo di = new DirectoryInfo(System.Environment.GetEnvironmentVariable("ALLUSERSPROFILE"));

这将为我提供所有用户个人资料的路径。

在C ++中,我可以使用SHGetFolderPath,但似乎并没有为所有用户提供CSLID。 是否有一个equlivant函数,我可以将%ALLUSERSPROFILE%输出到其路径值?

5 个答案:

答案 0 :(得分:10)

SHGetFolderPathCSIDL_COMMON_APPDATA一起使用。或SHGetKnownFolderPath,因为Vista与FOLDERID_ProgramData

或者,使用.NET native Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

答案 1 :(得分:3)

使用ExpandEnvironmentStrings展开%ALLUSERSPROFILE%字符串。此方法是Kernel32.dll的一部分。

答案 2 :(得分:1)

对于大多数用途,您应该能够将SHGetFolderPath与其中一个CSIDL_COMMON_...值一起使用(有关完整列表,请参阅here)以获取所有用户路径的子目录您感兴趣的(对于Windows Vista及更高版本,您可以将SHGetKnownFolderPathFOLDERID_Public...值之一一起使用;请参阅here。)

答案 3 :(得分:1)

请注意,在某些安全情况下,该文件夹可能甚至不是真正的文件夹。没有一个CSIDL_因为它总是一个强烈的暗示,你已经走开了。

您确定使用_APPDATA并不是更好吗?

答案 4 :(得分:0)

您可以使用getenv CRT函数获取ALLUSERSPROFILE环境变量的值,其方式与C#相同。