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
?
答案 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文件夹下的文件,则应将路径与PathCommonPrefix或IKnownFolderManager::FindFolderFromPath进行比较。