2010-11-01 113 views
10

我用下面的代码来获取特殊目录获取我的文档在Delphi中的文件夹路径

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:=字符串(FBuf)+' \文件',我认为它运作良好 但我的疑问是这是所有的Windows PC(个人文件夹/文件)mydocuments路径可以让用户改变这个结构,并使我的文件夹anywhare其他(如:c:\ documents) if用户更改路径给我一个正确的方法,我想知道什么是mydocuments文件夹(我的文档或文档)的名称

+0

请注意某些版本的Windows使用本地化的路径名称。除非您完全确定所运行的版本和语言,否则绝对不要使用英语或任何语言将“特殊”文件夹名称添加为字符串常量。它可能不是目标系统上的正确名称。始终使用特定的CSIDL_或其更新的等价物之一。 – 2010-11-01 11:05:11

回答

15

CSIDL_PERSONAL My Documents文件夹:

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

以前版本6.0。文件 系统目录用于物理上 存储用户的公用存储库 文件。一个典型的路径是 C:\ Documents and Settings \用户名\我的 文档。这应该是 区别于命名空间中的虚拟我的 Documents文件夹。要 访问该虚拟文件夹,请使用 SHGetFolderLocation,它返回 ITEMIDLIST作为虚拟位置, 或参考 管理文件系统。管理文件系统。

参见:http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx可用

15

如果您使用的是最近的德尔福(XE5或以上)的版本的所有CSIDL常量列表和说明,那么你可以使用新的平台无关的类。基本上包括System.IOUtils在您的uses然后使用TPath.GetDocumentsPath获取文档文件夹。

检出Doc Wiki

相关问题