Где кроссплатформенные приложения должны хранить свои данные?

StackOverflow https://stackoverflow.com/questions/57019

  •  09-06-2019
  •  | 
  •  

Вопрос

В ближайшее время я создаю приложение, предназначенное для Windows, Mac и Linux.Мне было интересно, где мне хранить данные приложения, такие как настройки и т. д.

Папка установки приложения — самый простой выбор, но я думаю, что это может быть проблемой с новой моделью безопасности Vista.Кроме того, пользователям могут потребоваться другие настройки.

Подходит ли C:\Documents and Settings\username\MyApp как для Vista, так и для XP?Подходит ли /home/username/.MyApp для Linux и Mac?

Любые идеи и/или ссылки на передовой опыт очень приветствуются.

Спасибо!

Хуан

Это было полезно?

Решение

Каждая платформа имеет свой собственный API для поиска домашней папки пользователя, папки документов или папки настроек.

  • Окна:SHGetFolderPath() или SHGetKnownFolderPath()
  • Mac OS X и iPhone OS:NSSearchPathForDirectoriesInDomains()
  • Юникс:Переменная среды $HOME

Не указывайте жестко определенные пути или просто добавляйте префикс и суффикс к имени пользователя.Кроме того, постарайтесь следовать всем соглашениям, принятым для платформы для именования файлов.

Другие советы

Что касается лучших практик, Джефф опубликовал статью о загрязнении пользовательского пространства, которая может оказаться вам полезной: Не загрязняйте пользовательское пространство

В общем, я бы рекомендовал абстрагировать реализацию ваших настроек в «Поставщике настроек» и предоставить разных поставщиков для каждой платформы.Таким образом, вы можете реализовать хранение настроек так, как лучше всего подходит для целевых платформ (например, файл в Linux или реестр Windows).

Не просто принимайте «наименьший общий знаменатель».Если у вас есть контент, который должен быть явно сохранен в файлах, попросите вашего поставщика настроек указать местоположение этих файлов, зависящее от платформы.

Я не :)

Я использую USERPROFILE в Windows и HOME в Mac/Linux.Но даже в этом случае мне нужно знать, что это правильные места.

Спасибо!

В Windows вам нужно пойти на другой уровень, чем просто профиль пользователя.Используйте папку «Данные приложения».

В Windows я использую APPDATA, а в Linux — HOME.

Никогда и никогда не храните пользовательские данные в папке приложения.Это просто плохая идея.

В большинстве операционных систем есть переменная среды $HOME (или %HOME%).Это было бы первое место для поиска.

Однако если вы хотите четко поддерживать несколько операционных систем, вам понадобится некоторый код, специфичный для каждой ОС, который точно определяет, куда все должно идти.(~/Library для Mac OS, ~/.config для систем на базе GNOME, %HOME%/Application Data для Windows и т. д.).

Какой язык вы планируете использовать?Например, в Java есть выделенный API предпочтений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top