O que é um arquivo INI ?


Um arquivo INI é um arquivo texto usado para armazenar/fornecer configurações pessoais para sistemas/usuários ; Um arquivo INI é um arquivo com dados externo ao programa principal e esta formatado em : Secções(FileName) , Entradas e Valores :

[Seçao1]
entrada=valor
entrada=valor
entrada=valor
[Seção2]
entrada=valor
entrada=valor

Um exemplo de arquivo INI é o WIN.INI cuja estrutura mostramos em parte a seguir:

[windows]
load=
run=
NullPort=None
device=HP DeskJet 690C,HPDSKJTB,LPT1:
SingleClickSpeed=067614

[Desktop]
Wallpaper=(None)
TileWallpaper=0
WallpaperStyle=2
Pattern=120 49 19 135 225 200 140 30

Como exemplo vamos usar o arquivo SHOW.INI (Show do Zecão) para guardar algumas preferências do usuário. Sua estrutura é a seguinte:

[Geral]
Tempo=50
Ajuda=2
Atualiza=SIM

Como fazemos para acessar e/ou alterar os valores em um arquivo INI ?

Boa pergunta ! Para fazer isto usamos duas API´s do Windows , vamos apresentá-las:

1-) API usada para ler os arquivos INI . Geralmente você faz esta declaração em um módulo:

Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nsize As Long, ByVal lpFileName As String) As Long

2-) API usada para escrever em uma arquivo INI. Geralmente você faz esta declaração em um módulo

Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Agora basta escrever duas funções que usam estas API´s , uma ler outra para escrever. Eí-las prontas abaixo:

1-) Função - ReadINI - lê um arquivo INI. Precisa de três parâmetros : O nome da Seção , o nome da Entrada e o nome do Arquivo INI.

Public Function ReadINI(Secao As String, Entrada As String, Arquivo As String)
  'Arquivo=nome do arquivo ini
  'Secao=O que esta entre []
  'Entrada=nome do que se encontra antes do sinal de igual
 
Dim retlen As String
 Dim Ret As String
 Ret = String$(255, 0)
 retlen = GetPrivateProfileString(Secao, Entrada, "", Ret, Len(Ret), Arquivo)
 Ret = Left$(Ret, retlen)
 ReadINI = Ret
End Function

2-) A função - WriteINI - escreve em um arquivo INI. Precisa de quatro parâmetros : o nome da Seção , o nome da Entrada ,  o nome do Texto ( Valor ) e o nome do arquivo INI.

Public Sub WriteINI(Secao As String, Entrada As String, Texto As String, Arquivo As String)
  'Arquivo=nome do arquivo ini
  'Secao=O que esta entre []
  'Entrada=nome do que se encontra antes do sinal de igual
  'texto= valor que vem depois do igual

  WritePrivateProfileString Secao, Entrada, Texto, Arquivo
End Sub

No nosso caso para Ler os valores do arquivo SHOW.INI usamos o seguinte código:

valortempo = ReadINI("Geral", "Tempo", App.Path & "\show.ini")
valorajuda = ReadINI("Geral", "Ajuda", App.Path & "\show.ini")
atualizaperguntas = ReadINI("Geral", "Atualiza", App.Path & "\show.ini")

As variáveis valortempo, valorajuda e atualizaperguntas irão armazenar os valores lidos do arquivo Show.ini através da função ReadINI.

Para Escrever em um arquivo INI alterando os valores das entradas: Tempo, Ajuda e Atualiza , usamos o seguinte código:

Call WriteINI("Geral", "Tempo", txttempo.Text, App.Path & "\show.ini")
Call WriteINI("Geral", "Ajuda", txtajuda.Text, App.Path & "\show.ini")
Call WriteINI("Geral", "Atualiza", txtatualiza.Text, App.Path & "\show.ini")

Os valores são informados nas caixas de texto txttempo.txt , txtajuda.text e txtatualiza.text . Como isso lemos e escrevemos em arquivos INI.

Veja o artigo - Show do Zecão - que mostra a utilização prática dos arquivos INI.(e otras cositas mas...)

Até o próximo artigo...


José Carlos Macoratti