(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;