在delphi中获取我的文档文件夹路径

在delphi中获取我的文档文件夹路径,delphi,directory,Delphi,Directory,我使用以下代码来获取特殊目录 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

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

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路径(personalfolder/documents),用户是否可以更改此结构并将mydocuments文件夹设置为其他文件夹(例如:c:\documents)
如果用户更改路径,请给我一个正确的方法,我想知道mydocuments文件夹(My Documents或Documents)的名称。

CSIDL\u PERSONALMy Documents文件夹:

CSIDL_个人文件夹文件 版本6.0。创建的虚拟文件夹 表示“我的文档”桌面 项目。这相当于 CSIDL_MYDOCUMENTS

版本6.0之前的版本。档案 用于物理访问的系统目录 存储用户的公共存储库 文件。典型的路径是 C:\Documents and Settings\username\My 文件。这应该是 区别于虚拟我的 命名空间中的Documents文件夹。到 访问该虚拟文件夹,请使用 SHGetFolderLocation,返回 虚拟位置的ItemIdle列表, 或参考中描述的技术 管理文件系统。管理文件系统


请参阅:有关所有可用CSIDL常量的列表和说明,如果您使用的是最新版本的Delphi(XE5或更高版本),则可以使用新的平台无关类。基本上包括
System.IOUtils
在您的
uses
中,然后使用
TPath.GetDocumentsPath
获取文档文件夹


查看

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