(Delphi 2006)我正在获取“通用文档”文件夹,以便在我的应用启动时从中创建另一个文件夹。这一直很好-它总是返回:

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中)。

因此,实际上有两个问题可能与之相关:


为什么GetSystemPath(CSIDL_COMMON_DOCUMENTS)返回null?
我实际上应该使用SHGetSpecialFolderPath吗?


(男孩,这是一个很难找到标签的人)

神秘的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;

最佳答案

当您想知道与SHGetSpecialFolderPath对应的路径时,应该调用CSIDL

我不知道GetSpecialFolderPath是什么,我在Delphi中找不到它。你是说SHGetSpecialFolderPath吗?我也找不到GetSystemPath,但这不会改变我的答案!

10-02 23:27