В Windows по умолчанию используется реестр. Это позволяет вам различать общесистемные и индивидуальные настройки.
В Unix вы должны использовать текстовые файлы в папке / etc для общесистемных настроек (что является соглашением для настроек для каждого пользователя?).
Многие новые программы (особенно разработанные для переносимости) используют файлы XML.
- Каков наилучший способ (и местоположение) для хранения настроек, отличных от BLOB?
- Должны ли мы следовать каждой системе по умолчанию или иметь единое решение?
- И какой самый лучший портативный способ?
portability
Wizard79
источник
источник
Ответы:
В Windows кажется приемлемым использовать реестр. По моему мнению, реестр был плохо разработанной системой, и вместо этого
Users\Username\AppData
предпочтительнее использовать простой текстовый файл в каталоге. Это проще для резервного копирования, менее опасно для пользователей и легче очищается.В Linux и большинстве Unixes предпочтительное расположение
/home/user/.config/appname
для пользовательских настроек и/etc/
для глобальных (общесистемных) настроек. Менее предпочтительным (но приемлемым) местом для пользовательских настроек является~/.appname
, но это, как правило, выходит из строя. Эти файлы должны быть доступны для редактирования пользователем, поэтому читаемый формат всегда предпочтителен.Я не согласен с большинством людей в том, что XML является приемлемым форматом для хранения данных без блобов. Это, на мой взгляд, перегруженный и чрезмерно сложный формат, который обычно заканчивается очень маленькими фрагментами структурированных данных. Я предпочитаю видеть файлы в YAML, JSON, ASN.1, парах имя = значение или в похожих форматах. Из-за слишком большого синтаксиса пользователю будет слишком легко запутаться и оставить файл в недопустимом формате.
Это полностью зависит от вас, но имейте в виду некоторые вещи:
/var/
. Nonmutable файлы данных должны храниться в директории приложения в/usr/share/
или/usr/local/share/
или/opt/
/etc/
не должны никогда быть записаны приложением , когда он работает, даже если он имеет доступ на запись к ним./etc/
должен быть хранилищем поведения по умолчанию и ничего больше./usr/local/
,/opt/appname
или/home/username/appname
.Users\User\AppData
. Нигде больше не кажется приемлемым.~/Library/Preferences
вместе со всеми списками файлов других приложений.plist
кажется предпочтительным форматом, но вы должны перепроверить с рекомендациями Apple.Нет «лучшего», если честно. Существуют только ограничения и ожидания для конкретной платформы. Я рекомендую придерживаться специфичных для платформы средств, даже если это означает написание большего количества кода.
источник
%APPDATA%
> In my opinion, the registry was a poorly-devised system, and instead a simple text file in the Users\Username\AppData directory should be preferred.
@greyfade - давний разработчик Windows API, Раймонд Чен (Raymond Chen), решает эту проблему и объясняет, почему использование текстовых файлов через реестр не является лучшим шаблоном проектирования: почему файлы INI не рекомендуются в пользу реестраПод Windows используйте
%APPDATA%\appname
. Под * NIX используйте~/.appname
. Не используйте фиксированные имена каталогов на любой платформе, поскольку домашний каталог пользователя может отличаться от заданного по умолчанию (например, он может быть в сети).Что касается формата, используйте то, что вы считаете лучшим. Это решение, которое только вы можете принять в контексте вашей заявки. Нет необходимости и, действительно, нецелесообразно иметь «стандартный» способ сделать это, если этот «стандартный» способ не является лучшим для вашей конкретной программы.
Например, XML / JSON может быть хорошим способом хранения пользовательских данных / конфигурации, если ваше приложение уже использует XML / JSON для чего-то другого. Но если это простой файл конфигурации, зачем добавлять раздув в свое приложение, вводя зависимость? В этом случае, вероятно, лучше всего использовать простой текстовый файл со
var: value\n
строками.РЕДАКТИРОВАТЬ: Существует не «лучший» портативный способ, так как ОС используют для этого очень разные соглашения. Не нарушайте стандарты ОС без кровавой причины.
РЕДАКТИРОВАТЬ 2: Если вы обнаружите, что устанавливаете общесистемную настройку в
/etc
илиHKEY_LOCAL_MACHINE
, спросите себя, действительно ли настройка глобальна. Затем подождите 5 минут и спросите себя снова. Если ответ все еще положительный, то непременно сделайте глобальную настройку. Помните, что обычный пользователь не имеет права на запись/etc
илиHKEY_LOCAL_MACHINE
, делая это, вы гарантируете, что кто-то без прав администратора не сможет установить ваше приложение.источник
~/.config/applicaton
становится все более предпочтительным местом для * nix.~
делают это~/.config/appname
.Я стараюсь держать из реестра, это способ более использоваться. Я хотел бы, чтобы все.
Мне нравится хранить XML-файлы конфигурации или bin-файл или иногда локальную базу данных (SQLite).
источник
Мой ответ на это сочетание Chinmay Kanchi в ответ и BioBuckyBall в ответ .
XML / Json для простых конфигураций, SQLite для сложных, более крупных конфигураций, припаркованных в папке приложения ОС по умолчанию или в папке пользователя ОС по умолчанию, когда конфигурации зависят от пользователя. Оба могут быть использованы.
источник
В Windows я бы оставил настройки приложения в
AppData
папкеисточник
Пользовательские настройки обычно находятся в
Так, например, для настроек irssi это /home//.irssi/config
источник
/home/<user>/etc/application
?~/.config/application
чтобы помочь консолидировать вещи. Я склонен согласиться с этим движением.AppData
.Я думаю, что лучше использовать предпочтительный механизм для конкретной платформы. Например, в OS X предпочтительным механизмом является размещение списка свойств в ~ / Library / Preferences, а API-интерфейс Cocoa имеет действительно простой интерфейс для хранения и извлечения настроек из него.
Если ваше приложение кроссплатформенное, вы можете абстрагироваться от него с помощью класса или еще чего-нибудь.
источник
Единственное, что я пишу в реестр, - это местоположение приложения, чтобы установщики и программы обновления могли легко его найти. Все остальное хранится в файлах в / AppData / Company / App
источник
Для Java - приложений я думаю gson выбор хороший. Создайте объекты настроек и используйте gson для преобразования их в JSON и наоборот. Преимущество в том, что он читается человеком, а не сериализованным блобом.
Изменить: хорошо, так что, может быть, не так широко ...
источник
Если вы пишете в .NET, вы можете использовать System.Environment.SpecialFolders, чтобы выяснить, какие папки можно использовать для сохранения конфигурации или даже некоторых данных.
источник