在Delphi中获取“我的文档”文件夹路径

13
我使用以下代码获取特定目录。
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上的"我的文档"路径(个人文件夹/文档)吗?用户是否可以更改此结构并在其他地方创建“我的文档”文件夹(例如:c:\documents)? 如果用户可以更改路径,请提供正确的方法,并且我想知道“My Documents”或“Documents”的名称。


请注意,某些版本的Windows使用本地化的路径名。除非您完全确定自己所运行的版本和语言,否则不要将“特殊”文件夹名称作为英语或其他语言的字符串常量添加进去。在目标系统上,它可能不是正确的名称。始终使用特定的CSIDL_或它们的新等效项。 - user160694
2个回答

29

如果您正在使用最新版本的Delphi(XE5或更高版本),则可以使用新的跨平台类。只需在uses中包含System.IOUtils,然后使用TPath.GetDocumentsPath获取文档文件夹。

请查看Doc Wiki


16

CSIDL_PERSONAL是“我的文档”文件夹:

CSIDL_PERSONAL FOLDERID_Documents 版本6.0。虚拟文件夹,表示“我的文档”桌面项。这相当于CSIDL_MYDOCUMENTS。

版本6.0之前。用于物理存储用户公共文档存储库的文件系统目录。典型路径为C:\Documents and Settings\用户名\My Documents。这应与命名空间中的虚拟“My Documents”文件夹区分开来。要访问该虚拟文件夹,请使用SHGetFolderLocation获取虚拟位置的ITEMIDLIST,或参考《管理文件系统》中描述的技术。

请参见:http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx以获取所有可用的CSIDL常量列表和描述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接