GetSystemPath или SHGetSpecialFolderPath - Что мне использовать для папки CommonDocs? - PullRequest
2 голосов
/ 09 марта 2011

(Delphi 2006) Я получаю папку «Общие документы» для создания из нее другой папки во время запуска моего приложения.Это работало нормально - всегда возвращает:

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).

Итак, действительно, два вопроса, возможно связанные:

  • , почему GetSystemPath (CSIDL_COMMON_DOCUMENTS) возвращает ноль?
  • на самом деле я должен использовать 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;

1 Ответ

1 голос
/ 09 марта 2011

Вам следует позвонить SHGetSpecialFolderPath, если вы хотите узнать путь, соответствующий CSIDL .

Я не знаю, что такое GetSpecialFolderPath, я не могу найти его в своем Delphi. Вы имели в виду SHGetSpecialFolderPath? Я также не могу найти GetSystemPath, но это не меняет моего ответа!

...