在C#中,我可以执行以下操作:
DirectoryInfo di = new DirectoryInfo(System.Environment.GetEnvironmentVariable("ALLUSERSPROFILE"));
这将为我提供所有用户个人资料的路径。
在C ++中,我可以使用SHGetFolderPath,但似乎并没有为所有用户提供CSLID。 是否有一个equlivant函数,我可以将%ALLUSERSPROFILE%输出到其路径值?
答案 0 :(得分:10)
将SHGetFolderPath
与CSIDL_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及更高版本,您可以将SHGetKnownFolderPath
与FOLDERID_Public...
值之一一起使用;请参阅here。)
答案 3 :(得分:1)
请注意,在某些安全情况下,该文件夹可能甚至不是真正的文件夹。没有一个CSIDL_因为它总是一个强烈的暗示,你已经走开了。
您确定使用_APPDATA并不是更好吗?
答案 4 :(得分:0)
您可以使用getenv
CRT函数获取ALLUSERSPROFILE环境变量的值,其方式与C#相同。