【发布时间】:2010-11-01 10:10:23
【问题描述】:
我使用以下代码获取特殊目录
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 文件夹(我的文档或文档)的名称是什么
【问题讨论】:
-
请注意,某些版本的 Windows 使用本地化路径名。除非您完全确定所运行的版本和语言,否则切勿将“特殊”文件夹名称添加为英语或任何语言的字符串常量。它可能不是目标系统上的正确名称。始终使用特定的 CSIDL_ 或其较新的等效项之一。