No Windows, a maneira padrão é o registro. Isso permite diferenciar as configurações de todo o sistema e por usuário.
No Unix, você deve usar arquivos de texto na pasta / etc para configurações em todo o sistema (qual é a convenção para configurações por usuário?).
Muitos programas novos (e especialmente aqueles projetados para serem portáteis) usam arquivos XML.
- Qual é a melhor maneira (e local) de armazenar configurações que não sejam BLOB?
- Devemos seguir cada padrão do sistema ou ter uma solução unificada?
- E qual é a melhor maneira portátil ?
portability
Wizard79
fonte
fonte
Respostas:
No Windows, parece aceitável usar o registro. Na minha opinião, o registro era um sistema mal planejado e, em vez disso, um arquivo de texto simples no
Users\Username\AppData
diretório deveria ser preferido. É mais fácil fazer backup, menos perigoso para os usuários modificarem e mais fáceis de limpar.No Linux e na maioria dos Unixes, o local preferido é
/home/user/.config/appname
para configurações específicas do usuário e/etc/
para configurações globais (em todo o sistema). O local menos preferido (mas aceitável) para as configurações do usuário é~/.appname
, mas isso geralmente está desvalorizando. Esses arquivos devem ser editáveis pelo usuário, portanto, sempre é preferível um formato legível por humanos.Eu discordo da maioria das pessoas de que XML é um formato aceitável para armazenar dados que não são de blob. É, na minha opinião, um formato exagerado e excessivamente complexo para o que geralmente acaba sendo pedaços muito pequenos de dados estruturados. Prefiro ver arquivos em YAML, JSON, ASN.1, pares nome = valor ou formatos semelhantes. Ter muita sintaxe facilita demais o usuário bagunçar e deixar o arquivo em um formato inválido.
Isso depende inteiramente de você, mas lembre-se de algumas coisas:
/var/
. Arquivos de dados Nonmutable deve ser mantido em seu diretório app em/usr/share/
ou/usr/local/share/
ou/opt/
/etc/
devem ser gravados pelo aplicativo quando estiver em execução, mesmo que ele tenha acesso de gravação. deve ser o repositório para comportamentos padrão e nada mais./etc/
/usr/local/
,/opt/appname
ou/home/username/appname
.Users\User\AppData
. Em nenhum outro lugar parece aceitável.~/Library/Preferences
junto com todos os arquivos plist dos outros aplicativos.plist
parece ser o formato preferido, mas convém verificar com as diretrizes da Apple.Não há "melhor", para ser honesto. Existem apenas limitações e expectativas específicas da plataforma. Minha recomendação é seguir os meios específicos da plataforma, mesmo que isso signifique escrever mais código.
fonte
%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 - O desenvolvedor de longa data da API do Windows, Raymond Chen, aborda isso e explica por que o uso de arquivos de texto no registro não é um padrão de design melhor: Por que os arquivos INI são preteridos em favor do registroNo Windows, use
%APPDATA%\appname
. Em * NIX, use~/.appname
. Não use nomes de diretórios fixos em nenhuma das plataformas, pois o diretório inicial do usuário pode ser diferente do padrão (pode estar na rede, por exemplo).Quanto ao formato, use o que achar melhor. Essa é uma decisão que somente você pode tomar no contexto de seu aplicativo. É desnecessário e, de fato, desaconselhável, ter uma maneira "padrão" de fazê-lo, se essa maneira "padrão" não for a melhor para o seu programa em particular.
Por exemplo, XML / JSON pode ser uma boa maneira de armazenar dados / configuração do usuário se seu aplicativo já usa XML / JSON para outra coisa. Mas se é um arquivo de configuração simples, por que adicionar inchaço ao seu aplicativo introduzindo uma dependência? Nesse caso, provavelmente é melhor usar apenas um arquivo de texto simples com
var: value\n
linhas.EDIT: Não existe uma "melhor" maneira portátil, pois os sistemas operacionais usam convenções muito diferentes para isso. Não quebre os padrões do sistema operacional sem uma boa razão.
EDIT2: Se você estiver fazendo uma configuração em todo o sistema
/etc
ouHKEY_LOCAL_MACHINE
, pergunte-se se a configuração é realmente global. Aguarde 5 minutos e pergunte a si mesmo novamente. Se a resposta ainda for afirmativa, faça um ajuste global. Lembre-se de que um usuário normal não tem acesso de gravação/etc
ou,HKEY_LOCAL_MACHINE
ao fazer isso, garante que alguém sem direitos de administrador não possa instalar seu aplicativo.fonte
~/.config/applicaton
está se tornando cada vez mais o local preferido no * nix.~
fazem~/.config/appname
.Eu tento e manter fora do registro, é muito usado. Eu gostaria que todos o fizessem.
Eu gosto de manter arquivos de configuração xml ou um arquivo bin ou, ocasionalmente, um banco de dados local (SQLite).
fonte
Minha resposta é uma combinação de de Chinmay Kanchi resposta e de BioBuckyBall resposta .
XML / Json para configurações simples, SQLite para configurações maiores e complexas estacionadas na pasta de aplicativo padrão do SO ou na pasta de usuário padrão do SO quando as configurações dependem do usuário. Ambos podem ser usados.
fonte
No Windows, eu manteria a configuração do aplicativo na
AppData
pastafonte
As configurações do usuário geralmente estão em
Por exemplo, para as configurações do irssi, são /home//.irssi/config
fonte
/home/<user>/etc/application
?~/.config/application
para ajudar a manter as coisas consolidadas. Estou inclinado a concordar com esse movimento.AppData
.Eu acho que é melhor usar o mecanismo específico da plataforma preferido. Por exemplo, no OS X, o mecanismo preferido é colocar uma lista de propriedades em ~ / Library / Preferences, e a API Cocoa possui uma interface realmente simples para armazenar e recuperar configurações a partir daí.
Se o seu aplicativo for multiplataforma, você poderá abstraí-lo com uma classe ou outros enfeites.
fonte
A única coisa que escrevo no registro é a localização do aplicativo, para que os instaladores e atualizadores possam encontrá-lo facilmente. Todo o resto é armazenado em arquivos em / AppData / Company / App
fonte
Para aplicativos Java, acho que o gson é uma boa escolha. Crie seus objetos de configuração e use o gson para convertê-los em JSON e vice-versa. Tem a vantagem de ser legível por humanos em vez de um blob serializado.
Edit: ok, então talvez não seja tão geral ...
fonte
Se você estiver escrevendo no .NET, poderá usar System.Environment.SpecialFolders para descobrir quais locais de pasta você pode usar para salvar a configuração ou mesmo alguns dados.
fonte