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

时间:2010-11-01 10:10:23

标签: 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;
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文件夹的名称是什么(我的文档或文档)

2 个答案:

答案 0 :(得分:17)

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

查看Doc Wiki

答案 1 :(得分:15)

CSIDL_PERSONAL 我的文档文件夹:

  

CSIDL_PERSONAL FOLDERID_Documents   版本6.0。那个虚拟文件夹   代表我的文档桌面   项目。这相当于   CSIDL_MYDOCUMENTS。

     

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

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