【问题标题】:Delphi: How to avoid duplication (OneDrive) in Document Folder setting?Delphi:如何避免文档文件夹设置中的重复(OneDrive)?
【发布时间】:2021-05-24 17:32:51
【问题描述】:

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

在 PC1 上,

Label1.Caption := TPath.GetDocumentsPath;

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

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

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

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

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

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

【问题讨论】:

  • 我使用 Local AppData 文件夹存储依赖于用户的设置,使用 ProgramData 存储全局设置(独立于用户)。
  • TPath.GetHomePath 返回 AppData 路径,如果你想使用的话。

标签: delphi directory default onedrive


【解决方案1】:

我使用 Local 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;

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

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

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

【讨论】:

  • 谢谢,弗朗索瓦。 FLocalAppData 是一个隐藏文件夹。对于他们不需要在我的程序之外看到的特定于用户的设置,我以前没有使用过,并且可能会开始使用它。至于用户保存的结果,我将把它留给他们,不再创建默认文件夹作为 \Documents 的分支。
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2012-04-30
  • 2016-07-24
相关资源
最近更新 更多