Estou tentando analisar um arquivo INI usando C ++. Alguma dica sobre qual é a melhor maneira de conseguir isso? Devo usar as ferramentas de API do Windows para processamento de arquivo INI (com as quais não estou totalmente familiarizado), uma solução de código aberto ou tentar analisá-la manualmente?
89
Se você precisar de uma solução de plataforma cruzada, experimente a biblioteca de opções de programa do Boost .
fonte
Nunca analisei arquivos ini, então não posso ser muito específico sobre este assunto.
Mas tenho um conselho:
não reinvente a roda, desde que uma existente atenda aos seus requisitos
http://en.wikipedia.org/wiki/INI_file#Accessing_INI_files
http://sdl-cfg.sourceforge.net/
http://sourceforge.net/projects/libini/
http://www.codeproject.com/KB /files/config-file-parser.aspx
Boa sorte :)
fonte
Eu uso SimpleIni . É multiplataforma.
fonte
Se você já está usando Qt
Então leia um valor
Existem vários outros conversores que convertem seus valores INI em tipos padrão e tipos Qt. Veja a documentação Qt em QSettings para mais informações.
fonte
sync()
, o que pode ser uma surpresa) e isso destrói os comentários e a ordem em que as variáveis foram definidas anteriormente ...essa pergunta é um pouco antiga, mas vou postar minha resposta. Eu testei várias classes INI (você pode vê-las no meu site ) e também uso o simpleIni porque quero trabalhar com arquivos INI no Windows e no winCE. GetPrivateProfileString () do Windows funciona apenas com o registro no winCE.
É muito fácil de ler com o simpleIni. Aqui está um exemplo:
fonte
inih é um analisador ini simples escrito em C, que também vem com um wrapper C ++. Exemplo de uso:
O autor também tem uma lista de bibliotecas existentes aqui .
fonte
Você já tentou libconfig ; sintaxe muito semelhante a JSON. Eu prefiro isso em vez de arquivos de configuração XML.
fonte
Se você estiver interessado na portabilidade da plataforma, também pode tentar Boost.PropertyTree. Ele suporta ini como formato de persistência, embora a árvore de propriedades possa ter apenas 1 nível de profundidade.
fonte
A menos que você planeje tornar o aplicativo multiplataforma, usar as chamadas de API do Windows seria o melhor caminho a seguir. Basta ignorar a observação na documentação da API sobre o fornecimento apenas para compatibilidade de aplicativos de 16 bits.
fonte
Talvez uma resposta tardia..Mas, vale a pena conhecer as opções..Se você precisa de uma solução de plataforma cruzada, definitivamente você pode tentar o GLIB ,, é interessante .. ( https://developer.gnome.org/glib/stable/glib- Key-value-file-parser.html )
fonte
Sei que essa pergunta é muito antiga, mas me deparei com ela porque precisava de algo multiplataforma para linux, win32 ... Eu escrevi a função abaixo, é uma função única que pode analisar arquivos INI, espero que outros achem útil.
regras e advertências: buf a analisar deve ser uma string terminada em NULL. Carregue seu arquivo ini em uma string de array char e chame esta função para analisá-lo. os nomes das seções devem ter [] colchetes ao redor deles, como este [MySection], também os valores e as seções devem começar em uma linha sem espaços à esquerda. Ele analisará arquivos com Windows \ r \ n ou Linux \ n terminações de linha. Os comentários devem usar # ou // e começar no início do arquivo, nenhum comentário deve ser misturado com os dados de entrada INI. Aspas e tiques são cortados em ambas as extremidades da string de retorno. Os espaços são cortados apenas se estiverem fora da citação. As strings não precisam ter aspas e os espaços em branco serão cortados se as aspas estiverem faltando. Você também pode extrair números ou outros dados, por exemplo, se você tiver um float, basta executar um atof (ret) no buffer ret.
Como usar ... exemplo ....
fonte
Acabei usando o inipp, que não é mencionado neste tópico.
https://github.com/mcmtroffaes/inipp
Era uma implementação apenas de cabeçalho licenciada pelo MIT que era simples o suficiente para adicionar a um projeto e 4 linhas para usar.
fonte