2

(Delphi 2006)我正在获取 Common 文档文件夹,以便在我的应用程序启动期间创建另一个文件夹。这一直工作正常 - 它总是返回:

C:\Documents and Settings\All Users\Documents\

但我刚刚收到来自西班牙用户的错误报告,其中包括显示应用程序正在尝试创建的启动日志:

MyApp\  

代替:

C:\Documents and Settings\All Users\Documents\MyApp\ 

即公共文档文件夹字符串为空。得到这个的代码是:

function GetCommonDocumentsFolder : TFilename ;

begin
Result := GetSystemPath (CSIDL_COMMON_DOCUMENTS) ;
end ;

我还在研究这个问题时注意到还有一个系统调用:

SHGetSpecialFolderPath 

我应该使用哪一个?GetSystemPath (CSIDL_COMMON_DOCUMENTS) 对我有用(至少在英语语言环境 Windows XP 中)。

所以 2 个问题真的很可能相关:

  • 为什么 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;
4

1 回答 1

1

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

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

于 2011-03-09T19:56:01.280 回答