Общее расположение данных для Linux и Mac OS X

В Windows есть стандартное расположение для данных приложения, которое используется всеми пользователями на машине (например, в Vista/7, (root):\ProgramData). Я ищу способ получить такую ​​папку на других платформах с помощью Qt.

  • Предоставляет ли Qt встроенный метод для этого? (QDesktopServices выглядит многообещающе, но, похоже, не предоставляет этого вариант.)
  • Если нет, то каковы стандартные расположения в системах Linux и Mac OS X для общих данных приложений? /usr/share правильное место? Есть ли стандарт вообще?

[УТОЧНЕНИЕ] Это для изменяемых данных.


person Dave Mateer    schedule 13.08.2010    source источник
comment
Отличный вопрос - это такая маленькая деталь, которую многие кроссплатформенные разработчики не учитывают/не хотят просто убрать.   -  person JulesLt    schedule 14.08.2010


Ответы (3)


Я не знаю, предоставляет ли Qt API для этого. Вот конкретная информация для OS X.

В OS X это зависит от того, является ли это приложением с графическим интерфейсом или библиотеками поддержки уровня Unix. Для приложения с графическим интерфейсом стандартная практика заключается в том, чтобы все данные, предназначенные только для чтения, совместно использовались всеми пользователями внутри самого пакета приложения. Обычно у вас есть

  YourApp.app/
  YourApp.app/Contents
  YourApp.app/Contents/MacOS
  YourApp.app/Contents/MacOS/YouApp      .... this is the binary
  YourApp.app/Contents/Resources/        .... here are all the shared data

Графический интерфейс представляет каталог YourApp.app как само приложение, так что вы можете без проблем копировать/перемещать его. Если это невозможно, рекомендуется использовать подкаталог

/Library/Application Support/name_of_your_app/

для данных, которыми обмениваются пользователи.

Плохая идея иметь изменяемые общие данные среди пользователей на машине; вообще невозможно из-за ограничений доступа. Обратите внимание, что у обычного пользователя может не быть и, как правило, нет прав администратора на запись в общую папку.

Для изменяемых данных, специфичных для пользователя, используйте

~/Library/Application Support/name_of_your_app/

См. это руководство Apple для получения дополнительной информации.

person Yuji    schedule 13.08.2010

Стандарт иерархии файловой системы предлагает использовать /usr/share для независимые от архитектуры файлы данных только для чтения, а /var/lib следует использовать для информация о состоянии, относящаяся к приложению или системе.

Вы не указали, имеете ли вы в виду состояние только для чтения или изменяемое, но формулировка вашего вопроса (в частности, сравнение с %COMMONAPPDATA%) предполагает изменяемое состояние, и в этом случае /var/lib будет уместно. Не забудьте иметь доступную группу пользователей с правами на запись в ваш подкаталог (или созданную сценарием установки пакета) и попросить системного администратора добавить в эту группу соответствующих пользователей.

person Mihai Limbășan    schedule 13.08.2010
comment
Различные каталоги в /var могут быть тем, что вы ищете. Вывод ‹code›man hier‹/code› описывает иерархию файлов в некоторых деталях. - person BillThor; 14.08.2010

В Mac OS одним из решений является использование каталога /Users/Shared, так как он доступен для чтения и записи для всех пользователей и, следовательно, может изменяться для всех. Необходимо убедиться, что любые файлы, которые вы создаете там, также доступны для чтения/записи для всех.

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

Моя компания использует Users/Shared именно для этой цели, но я не знаю, насколько "аккуратно" это считается.

person Finn    schedule 11.09.2010