我使用以下代码获取特殊目录
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文件夹的名称是什么(我的文档或文档)
答案 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常量的列表和描述