Delphi: 如何在文档文件夹设置中避免重复(OneDrive)?

Delphi: How to avoid duplication (OneDrive) in Document Folder setting?

尝试以一种不那么混乱的方式存储用户设置和默认保存的数据位置。

在 PC1 上,

Label1.Caption := TPath.GetDocumentsPath;

给我显示 C:\Users\Mike\Documents,在 PC2 上它显示 C:\users\mike\OneDrive\Documents。

在 PC2 上,我有两组 \Documents 文件和文件夹,它们彼此不匹配,查找设置或文档涉及搜索。我收到了一位新加坡用户的反馈,他同样报告说很难找到他们的数据。

由于我的应用程序默认将用户设置存储在 \Documents 的子文件夹中,并且世界各地的用户都有不同的实现方式,因此我希望得到建议。

我想我应该接受 TPath.GetDocumentsPath 提供的任何内容而不尝试修改它?

如果我的应用程序可以检测到两个 \Documents 文件夹,我可以发出警告。

或者我应该在其他地方设置默认商店吗?

我使用本地 AppData 文件夹存储依赖于用户的设置,使用 ProgramData 存储全局设置(独立于用户)。代码摘录:

var
    CommonPath   : array [0..MAX_PATH] of Char;
    LocalPath    : array [0..MAX_PATH] of Char;
    LangFileName : String;
begin
    SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, @CommonPath[0]);
    SHGetFolderPath(0, CSIDL_LOCAL_APPDATA,  0, SHGFP_TYPE_CURRENT, @LocalPath[0]);
    FAppName        := ChangeFileExt(ExtractFileName(Application.ExeName), '');
    FCommonAppData  := IncludeTrailingPathDelimiter(CommonPath) +
                       CompanyFolder + '\' + FAppName + '\';
    FLocalAppData   := IncludeTrailingPathDelimiter(LocalPath) +
                       CompanyFolder + '\' + FAppName + '\';
    ForceDirectories(FCommonAppData);
    ForceDirectories(FLocalAppData);
end;

变量在表单的受保护位置中 class:

    FLocalAppData                 : String;
    FCommonAppData                : String;
    FAppName                      : String;

CompanyName是一个常数,其值显然是我的公司名称。