GetSystemPath или SHGetSpecialFolderPath - Что мне использовать для папки CommonDocs?
(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).
Так что 2 вопроса действительно, возможно, связаны между собой:
- почему 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 ответ
Вам следует позвонить SHGetSpecialFolderPath
когда вы хотите узнать путь, соответствующий CSIDL.
Я не знаю что GetSpecialFolderPath
Я не могу найти его в моем Delphi. Ты имел ввиду SHGetSpecialFolderPath
? Я тоже не могу найти GetSystemPath
, но это не меняет мой ответ!