【问题标题】:Get My Documents folder path in delphi在delphi中获取我的文档文件夹路径
【发布时间】:2010-11-01 10:10:23
【问题描述】:

我使用以下代码获取特殊目录

uses
  ActiveX, ShlObj;

{...}

procedure TForm1.Button1Click(Sender: TObject);
// Replace CSIDL_HISTORY with the constants below
var
  Allocator: IMalloc;
  SpecialDir: PItemIdList;
  FBuf: array[0..MAX_PATH] of Char;
  PerDir: string;
begin
  if SHGetMalloc(Allocator) = NOERROR then
  begin
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_PERSONAL, SpecialDir);
    SHGetPathFromIDList(SpecialDir, @FBuf[0]);
    Allocator.Free(SpecialDir);
    ShowMessage(string(FBuf));
  end;
end;

现在我想获取我的文档路径 所以我用 mydocfolderpath := string(FBuf) + '\Documents' 我认为它运作良好 但我怀疑这是所有 Windows PC(个人文件夹/文档)上的 mydocuments 路径,用户可以更改此结构并使我的文档文件夹成为其他文件夹(例如:c:\documents) 如果用户更改路径给我一个正确的方法,我想知道 mydocuments 文件夹(我的文档或文档)的名称是什么

【问题讨论】:

  • 请注意,某些版本的 Windows 使用本地化路径名。除非您完全确定所运行的版本和语言,否则切勿将“特殊”文件夹名称添加为英语或任何语言的字符串常量。它可能不是目标系统上的正确名称。始终使用特定的 CSIDL_ 或其较新的等效项之一。

标签: delphi directory


【解决方案1】:

如果您使用的是最新版本的 Delphi(XE5 或更高版本),那么您可以使用新的平台无关类。基本上将System.IOUtils 包含在您的uses 中,然后使用TPath.GetDocumentsPath 获取文档文件夹。

查看Doc Wiki

【讨论】:

    【解决方案2】:

    CSIDL_PERSONAL 我的文档文件夹:

    CSIDL_PERSONAL FOLDERID_Documents 6.0 版。虚拟文件夹 代表我的文档桌面 物品。这相当于 CSIDL_MYDOCUMENTS。

    6.0 版之前的版本。文件 用于物理的系统目录 存储用户的公共存储库 文件。一个典型的路径是 C:\文档和设置\用户名\我的 文件。这应该是 区别于虚拟我 命名空间中的 Documents 文件夹。至 访问该虚拟文件夹,使用 SHGetFolderLocation,它返回 虚拟位置的 ITEMIDLIST, 或参考中描述的技术 管理文件系统。管理文件系统。

    有关所有可用 CSIDL 常量的列表和说明,请参阅:http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 2012-12-30
      • 2020-08-09
      • 2011-01-25
      相关资源
      最近更新 更多