如何获取应用数据路径

How to get the AppData path

本文关键字:应用 数据路径 获取 何获取      更新时间:2023-10-16
SHGetSpecialFolderPathA(NULL,buffer, CSIDL_APPDATA,FALSE );

C:UsersguestAppDataRoaming

SHGetSpecialFolderPathA(NULL,buffer, CSIDL_LOCAL_APPDATA,FALSE );

C:UsersguestAppDataLocal

有没有办法使用Windows API获取路径C:UsersguestAppData

漫游和本地文件夹的存在是有原因的,有时您可能需要在配置文件的根目录中放置一些东西,但您实际上不应该这样做。以下是 MSDN 对CSIDL_PROFILE的评价:

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

在NT5上,它们甚至没有相同的父文件夹,并且"漫游"位于配置文件的根目录中:

C:Documents and SettingsusernameApplication Data
C:Documents and SettingsusernameLocal SettingsApplication Data
用户和/或

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

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

如果要排除特殊shell文件夹下的文件,则应将路径与PathCommonPrefix 或IKnownFolderManager::FindFolderFromPath之类的内容进行比较。