(Delphi 2006)我正在获取Common documents文件夹,以便在我的app启动期间创建另一个文件夹。这一直很好 - 它总是返回:
C:\Documents and Settings\All Users\Documents\
但我刚刚收到西班牙用户的错误报告,其中包含显示该应用正在尝试创建的启动日志:
MyApp\
而不是:
C:\Documents and Settings\All Users\Documents\MyApp\
即。常见的docs文件夹字符串为空。得到这个的代码是:
function GetCommonDocumentsFolder : TFilename ;
begin
Result := GetSystemPath (CSIDL_COMMON_DOCUMENTS) ;
end ;
我在研究这个问题时也注意到还有一个系统调用:
SHGetSpecialFolderPath
我应该使用哪一个? GetSystemPath(CSIDL_COMMON_DOCUMENTS)对我有用(至少在英文版本的Windows XP中)。
所以2个问题确实可能相关:
(男孩,这是一个很难找到标签的人)
神秘的GetSystemPath的来源:
function GetSystemPath (Folder: Integer) : TFilename ;
{ Call this function with one of the constants declared above. }
var
PIDL : PItemIDList ;
Path : LPSTR ;
AMalloc : IMalloc ;
begin
Path := StrAlloc (MAX_PATH) ;
SHGetSpecialFolderLocation (Application.Handle, Folder, PIDL) ;
if SHGetPathFromIDList (PIDL, Path) then
begin
Result := IncludeTrailingPathDelimiter (Path) ;
end
else
begin
Result := '' ;
end ; ;
SHGetMalloc(AMalloc) ;
AMalloc.Free (PIDL) ;
StrDispose (Path) ;
end;
答案 0 :(得分:1)
如果您想知道与SHGetSpecialFolderPath
对应的路径,请致电CSIDL。
我不知道GetSpecialFolderPath
是什么,我在Delphi中找不到它。你是说SHGetSpecialFolderPath
吗?我也找不到GetSystemPath
,但这并没有改变我的答案!