我有一个 Delphi 6 应用程序,与大多数 Windows 应用程序一样,它读取/写入数据到用户的“本地应用程序数据”文件夹。我使用下面的代码来确定该文件夹。到目前为止,该代码对我的大多数用户都有效。我遇到了一个用户,其本地应用程序数据不在预期的文件夹中:
C:\Users\Bob\AppData\Roaming\
通常本地应用程序数据文件夹解析为:
C:\Documents and Settings\Bob\Application Data\
这个用户的特殊情况奇怪的是,通常在 HKEY_LOCAL_MACHINE 中找到的几个注册表项实际上位于 HKEY_CURRENT_USER 中。它们在 Windows 7 上运行。
由于缺乏更好的词,有没有办法为用户获取“真实”的应用程序数据,以便我可以更好地导航这种情况?如果是在 CSIDL_APPDATA、CSIDL_COMMON_APPDATA 和 CSIDL_LOCAL_APPDATA 特殊文件夹之间进行智能选择,这样做的逻辑是什么?如您所知,我正在寻找一种通用功能,该功能可以根除正确的应用程序数据文件夹,而不管用户正在运行的 Windows 版本或其特定的 PC 配置如何。
我发现这个 Stack Overflow 帖子似乎有答案,但它使用的是 .NET 库中的函数,我使用的是 Delphi 6。如果这个解决方案回答了我的问题,有人可以告诉我在 Delphi 中复制它的快速方法:
// Function to get the app data special folder.
function GetAppdataFolder: string;
begin
Result := GetSpecialFolderLocation(CSIDL_APPDATA);
end;