【问题标题】:How to get the AppData path如何获取 AppData 路径
【发布时间】:2012-05-21 12:41:50
【问题描述】:
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

【问题讨论】:

  • 我想避免 Appdata 下的任何文件夹。即,如果用户选择了 AppaData 下的任何文件夹,我必须跳过这些。
  • 今天HPFE455提出的另一个问题是在Win7上寻找临时文件夹。如果这与同一个项目有关,则自 Vista 以来不推荐使用 SHGetSpecialFolderPath。搜索 MSDN 文档将回答这个问题和许多相关问题。

标签: c++ winapi


【解决方案1】:

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

应用程序不应在此级别创建文件或文件夹;他们 应该将他们的数据放在 CSIDL_APPDATA 引用的位置下 或 CSIDL_LOCAL_APPDATA。但是,如果您正在创建一个新的 Known 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(请记住,不必有父级,IKnownFolderManager::重定向将字符串作为目标,因此重定向的文件夹可以在任何地方)

如果您想排除特殊 shell 文件夹下的文件,您应该将路径与 PathCommonPrefixIKnownFolderManager::FindFolderFromPath 之类的路径进行比较。

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2022-12-12
    • 2012-10-22
    相关资源
    最近更新 更多