GetAppConfigDir в Windows

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

GetAppConfigDir в Windows

Сообщение Flanter » 03.02.2009 12:19:17

Есть подозрение, что функция GetAppConfigDir (SysUtils, FreePascal 2.2.2, Windows) работает не совсем корректно. А именно: если флаг Global = False, то возвращается значение

Код: Выделить всё
CSIDL_LOCAL_APPDATA

то есть каталог вида

Код: Выделить всё
C:\Documents and Settings\<USER>\Local Settings\

в то время как правильнее (имхо) было бы возвращать значение

Код: Выделить всё
CSIDL_APPDATA

то есть каталог типа

Код: Выделить всё
C:\Documents and Settings\<USER>\Application Data

Именно в этом каталоге хранятся пользовательские настройки подавляющего большинства программ, а в Local Settings пишутся в основном такие данные, которые не страшно потерять - кэши, скачанные файлы обновлений и т.п.

Прав ли я? Если да, то, наверное, попробую завести запись на Bug Tracking'е...
Flanter
новенький
 
Сообщения: 42
Зарегистрирован: 03.11.2007 22:15:54

Re: GetAppConfigDir в Windows

Сообщение Sergei I. Gorelkin » 03.02.2009 15:11:52

Этот вопрос не так давно обсуждали в списке рассылки (и записи в багтрекере тоже были), в результате решили оставить как есть, дабы не ломать написанный код.
Разница между этими вариантами состоит в том, что содержимое CSIDL_APPDATA пересылается по сети в случае удаленного входа, а CSIDL_LOCAL_APPDATA - нет, поэтому туда можно без опаски скидывать любые объемы данных.
По-хорошему, нужно иметь оба варианта (а еще есть CSIDL_COMMON_APPDATA, который тоже иногда бывает нужен, а в Висте добавлено еще несколько вариантов), но аналогов в других системах нет, т.е. эта ф-ция не кроссплатформенна по определению.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: GetAppConfigDir в Windows

Сообщение Flanter » 04.02.2009 11:40:36

Действительно, нашёл это обсуждение в архиве - спасибо! Как вариант можно сделать дополнительный набор функций - типа GetAppRoamingDir и т.п. На Windows они будут возвращать разные каталоги, а на других системах будут указывать на обычный конфигурационный каталог, аналог CSIDL_LOCAL_APPDATA. Существующие приложения при этом не затрагиваются, а новые смогут использовать то, что наиболее правильно для конкретной ситуации.

В принципе я и руками могу у себя в проекте сделать соответствующий WinAPI-вызов, просто не хотелось бы терять кроссплатформенность... там чуть-чуть, тут чуть-чуть - так весь код постепенно IFDEF-ами обрастёт :)
Flanter
новенький
 
Сообщения: 42
Зарегистрирован: 03.11.2007 22:15:54

Re: GetAppConfigDir в Windows

Сообщение Иван Шихалев » 04.02.2009 13:14:40

Зачем весь код? В один модуль все увязанное на IFDEF и API, и нормально.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: GetAppConfigDir в Windows

Сообщение Sergei I. Gorelkin » 04.02.2009 13:23:59

Или в два модуля с одинаковыми интерфейсами, один из которых компилится под винду, другой под линукс. IFDEF-ов при этом нет вообще.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru