Como manipular arquivos INI do Delphi

Arquivos INI são arquivos baseados em texto usados ​​para armazenar os dados de configuração de um aplicativo.

Apesar de janelas recomenda o uso do Registro do Windows para armazenar dados de configuração específicos do aplicativo; em muitos casos, você encontrará que os arquivos INI fornecem uma maneira mais rápida de o programa acessar suas configurações. O próprio Windows ainda usa arquivos INI; desktop.ini e boot.ini sendo apenas dois exemplos.

Um uso simples dos arquivos INI como mecanismo de economia de status seria salvar o tamanho e o local de um formulário, se você desejar que um formulário reapareça na posição anterior. Em vez de pesquisar um conjunto banco de dados de informações para encontrar o tamanho ou o local, um arquivo INI é usado.

O formato de arquivo INI

O arquivo de inicialização ou definições de configuração (.INI) é um arquivo de texto com um limite de 64 KB dividido em seções, cada uma contendo zero ou mais chaves. Cada chave contém zero ou mais valores.

Aqui está um exemplo:

instagram viewer
 [Nome da Seção]
keyname1 = value
;Comente
keyname2 = value

Nomes de seção estão entre colchetes e devem começar no início de uma linha. Os nomes de seção e chave não diferenciam maiúsculas de minúsculas (o caso não importa) e não podem conter caracteres de espaçamento. o nome da chave é seguido por um sinal de igual ("="), opcionalmente cercado por caracteres de espaçamento, que são ignorados.

Se a mesma seção aparecer mais de uma vez no mesmo arquivo ou se a mesma chave aparecer mais de uma vez na mesma seção, a última ocorrência prevalecerá.

Uma chave pode conter corda, número inteiro ou boleanovalor.​

Delphi O IDE usa o formato de arquivo INI em muitos casos. Por exemplo, Arquivos .DSK (configurações da área de trabalho) utilizam o formato INI.

Classe TIniFile

Delphi fornece o TIniFile classe, declarada no inifiles.pas unit, com métodos para armazenar e recuperar valores de arquivos INI.

Antes de trabalhar com os métodos TIniFile, você precisa criar uma instância da classe:

usa inifiles;
...
var
IniFile: TIniFile;
início
IniFile: = TIniFile. Create ('myapp.ini');

O código acima cria um objeto IniFile e atribui 'myapp.ini' à única propriedade da classe - o Propriedade FileName —Utilizado para especificar o nome do arquivo INI que você deve usar.

O código conforme escrito acima procura o myapp.ini arquivo no \Janelas diretório. A melhor maneira de armazenar dados do aplicativo está na pasta do aplicativo - basta especificar o nome do caminho completo do arquivo para o arquivo Crio método:

// coloque o INI na pasta do aplicativo,
// deixe que ele tenha o nome do aplicativo
// e 'ini' para extensão:

iniFile: = TIniFile. Criar (ChangeFileExt (aplicativo. ExeName, '. Ini'));

Leitura do INI

A classe TIniFile possui vários métodos de "leitura". O ReadString lê um valor da string de uma chave, ReadInteger. ReadFloat e similares são usados ​​para ler um número de uma tecla. Todos os métodos "read" têm um valor padrão que pode ser usado se a entrada não existir.

Por exemplo, o ReadString é declarado como:

função ReadString (const Seção, Ident, Padrão: String): String; sobrepor;

Escreva para INI

O TIniFile possui um método "write" correspondente para cada método "read". Eles são WriteString, WriteBool, WriteInteger, etc.

Por exemplo, se quisermos que um programa lembre o nome da última pessoa que o usou, quando era e quais eram as coordenadas do formulário principal, poderíamos estabelecer uma seção chamada Comercial, uma palavra-chave chamada Último, Encontro para rastrear as informações e uma seção chamada Canal com chaves Topo, Esquerda, Largurae Altura.

project1.ini
[Do utilizador]
Último = Zarko Gajic
Data = 29/01/2009
[Colocação]
Top = 20
Esquerda = 35
Largura = 500
Altura = 340

Observe que a chave chamada Último mantém um valor de sequência, Encontro mantém um valor TDateTime e todas as chaves no Canal seção mantenha um valor inteiro.

O evento OnCreate do formulário principal é o local perfeito para armazenar o código necessário para acessar os valores no arquivo de inicialização do aplicativo:

procedimento TMainForm. FormCreate (Remetente: TObject);
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
início
appINI: = TIniFile. Criar (ChangeFileExt (aplicativo. ExeName, '. Ini'));
experimentar
// se nenhum último usuário retornar uma string vazia
LastUser: = appINI.ReadString ('Usuário', 'Último', '');
// se nenhuma última data retornar data de hoje
LastDate: = appINI.ReadDate ('Usuário', 'Data', Data);
// mostra a mensagem
ShowMessage ('Este programa foi usado anteriormente por' + LastUser + 'on' + DateToStr (LastDate));
Superior: = appINI.ReadInteger ('Posicionamento', 'Superior', Superior);
Esquerda: = appINI.ReadInteger ('Posicionamento', 'Esquerda', Esquerda);
Largura: = appINI.ReadInteger ('Posicionamento', 'Largura', Largura);
Height: = appINI.ReadInteger ('Posicionamento', 'Altura', Altura);
finalmente
appINI.Free;
fim;
fim;

O evento OnClose do formulário principal é ideal para o Save INI parte do projeto.

procedimento TMainForm. FormClose (Remetente: TObject; var Ação: TCloseAction);
var
appINI: TIniFile;
início
appINI: = TIniFile. Criar (ChangeFileExt (aplicativo. ExeName, '. Ini'));
experimentar
appINI.WriteString ('Usuário', 'Último', 'Zarko Gajic');
appINI.WriteDate ('Usuário', 'Data', Data);
com appINI, MainForm Faz
início
WriteInteger ('Posicionamento', 'Superior', Superior);
WriteInteger ('Posicionamento', 'Esquerda', Esquerda);
WriteInteger ('Posicionamento', 'Largura', Largura);
WriteInteger ('Posicionamento', 'Altura', Altura);
fim;
finalmente
appIni. Livre;
fim;
fim;

Seções INI

o EraseSection apaga uma seção inteira de um arquivo INI. ReadSection e ReadSections preencha um objeto TStringList com os nomes de todas as seções (e nomes de chaves) no arquivo INI.

Limitações e desvantagens do INI

A classe TIniFile usa a API do Windows que impõe um limite de 64 KB em arquivos INI. Se você precisar armazenar mais de 64 KB de dados, use o TMemIniFile.

Outro problema pode surgir se você tiver uma seção com mais de 8 K de valor. Uma maneira de resolver o problema é escrever sua própria versão do método ReadSection.

instagram story viewer