如何获取AppData路径

时间:2012-02-02 20:47:58

标签: c++ winapi

SHGetSpecialFolderPathA(NULL,buffer, CSIDL_APPDATA,FALSE );
  

C:\Users\guest\AppData\Roaming

SHGetSpecialFolderPathA(NULL,buffer, CSIDL_LOCAL_APPDATA,FALSE );
  

C:\Users\guest\AppData\Local

有没有办法使用Windows API获取路径C:\Users\guest\AppData

1 个答案:

答案 0 :(得分:3)

漫游和本地文件夹存在是有原因的,有时您可能需要在配置文件的根目录中放置一些内容,但实际上并不应该这样做。这就是MSDN关于CSIDL_PROFILE:

的说法
  

应用程序不应在此级别创建文件或文件夹;他们   应将其数据放在CSIDL_APPDATA引用的位置下   或CSIDL_LOCAL_APPDATA。但是,如果您要创建新的已知   CSIDL_PROFILE引用的配置文件根目录的文件夹是合适的。

在NT5上,他们甚至没有相同的父文件夹,并且“漫游”位于个人资料的根目录中:

C:\Documents and Settings\username\Application Data
C:\Documents and Settings\username\Local Settings\Application Data

用户和/或域管理员可以将这些文件夹移动和/或重定向到任何位置,移动到不同驱动器或网络共享的根目录。

我能想到找到父母的唯一记录方式是使用IKnownFolderManager::GetFolder,然后拨打IKnownFolder::GetFolderDefinition并查看KNOWNFOLDER_DEFINITION.fidParent(请记住,不必是{{1}}父,IKnownFolderManager :: Redirect将字符串作为目标,因此重定向的文件夹可以在任何地方)

如果要排除特殊shell文件夹下的文件,则应将路径与PathCommonPrefixIKnownFolderManager::FindFolderFromPath进行比较。