Кроссплатформенный способ хранения настроек / кеша - PullRequest
1 голос
/ 15 июня 2011

В настоящее время я пишу программу на C, которая должна хранить файлы конфигурации и различные файлы кэша на диске, а также некоторые статические файлы данных, которые никогда не меняются, и которые могут безопасно использоваться всеми пользователями.

Я хочу хранить эти файлы в соответствующем месте операционной системы, если это возможно, переносимым способом ...

Например, в GNU / Linux:

$XDG_CONFIG_HOME/<program_rame>/ -- for configuration files
$XDG_CACHE_HOME/<program_name>/ -- for cache files
$XDG_DATA_DIRS/<program_name>/ -- for static files

И, если они не установлены, я могу использовать рекомендуемые значения по умолчанию ("~ / .config", "~ / .cache" и "/ usr / share"). GNU / Linux - это просто.

Однако в Windows я понятия не имею, как найти их эквивалент. Я думаю, что это будет где-то в AppData, но где? И, самое главное, как мне получить это программно? А как насчет других ОС (особенно Mac OS, поскольку большинство других UNIX также могут использовать метод «GNU / Linux»)?

Я открыт для всех решений, независимо от того, нужна ли им библиотека или нет Заранее спасибо за помощь!

1 Ответ

1 голос
/ 15 июня 2011

Windows имеет так называемые известные идентификаторы папок , ранее (до Vista) известные как специальные идентификаторы элементов или CSIDL . Например, в папке, на которую ссылается FOLDERID_LocalAppData (то есть %USERPROFILE%\AppData\Local), может быть то, что вы ищете. Я не на Windows, и поэтому я не знаю, какой C-API эти значения обеспечивают. Однако есть вероятность, что эти папки также доступны в качестве переменных среды (например, %LOCALAPPDATA%).

...