VB 2005 - Trabalhando com arquivos .INI
Hoje veremos como trabar com arquivos INI no VB .NET. |
Você lembra dos arquivos .INI ? Eles tiveram seu momento de glória no Windows 3.1 e foram perdendo a importância. Apesar disso eles eram uma opção a usar o registro do sistema para armazenar informações das configurações da aplicação e outros dados que o desenvolvedor julgasse importantes.
Para acompanhar os artigos relacionados com este assunto veja também: |
Os arquivos ini são arquivos textos com uma extensão .ini que contêm valores persistidos e que esta dividido em seções identificadas por um nome entre colchetes([Exemplo]) e uma chave a qual será atribuído um valor.
Cada seção pode conter uma nome de uma chave e a seguir o valor correspondente. Abaixo temos um exemplo de um arquivo .ini chamado macoratti.ini contendo duas seções : [Geral] e [Seguranca] com valores definidos previamente.
[Geral] MsgEmpresa=Participe dos jogos internos LogoEmpresa=c:\imagem\logo.gif [Seguranca] Password=365<?: Administrador=Macoratti |
As funções da API GetPrivateProfileString e WritePrivateProfileString são usadas para ler e escrever as entradas em um arquivo .INI. Para usar estas declarações de API no VB.NET devemos efetuar alguns ajustes nos tipos de dados dos parâmetros.
Vamos criar um projeto usando o Visual Basic 2005 Express com o nome de arquivoININet, e, no formulário padrão form1.vb inclua 4 caixas de texto, 4 labels, um botão de comando e um controle checkBox conforme o leiaute abaixo:
Qual é o nosso objetivo afinal ?
Bem , temos um arquivo .INI chamado macoratti.ini que se encontra na pasta bin da aplicação e vamos ler o conteúdo deste arquivo exibindo-o no formulário e ainda permitindo que o usuário altere os valores para em seguida salvar as alterações no mesmo arquivo .INI. Entendeu ?
Declare no projeto os seguintes namespaces usados :
Imports
System.Security.CryptographyImports
System.IOImports
System.text
A seguir vamos declarar as funções das APIs que vamos usar:
Private Declare Auto Function GetPrivateProfileString Lib "Kernel32" ( ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As StringBuilder, ByVal nSize As Integer, ByVal lpFileName As String) As IntegerPrivate Declare Auto Function WritePrivateProfileString Lib "Kernel32" ( ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
|
Vamos incluir o seguinte código no evento Load do formulário para que quando ele seja aberto os dados sejam exibidos no formulário:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim nome_arquivo_ini As String = nomeArquivoINI() If Not File.Exists(nome_arquivo_ini) Then MsgBox( "Será carregado os valores padrão do sistema.") End IftxtMensagem.Text = LeArquivoINI(nome_arquivo_ini, "Geral", "MsgEmpresa", "Atualiza o seu cadastro")txtLogoTipo.Text = LeArquivoINI(nome_arquivo_ini, "Geral", "LogoEmpresa", "logo.gif")txtSenha.Text = LeArquivoINI(nome_arquivo_ini, "Seguranca", "Password", "??????")txtAdmin.Text = LeArquivoINI(nome_arquivo_ini, "Seguranca", "Administrador", "Mac")End Sub |
Para ler os arquivos usamos a função LeArquivoINI informando o nome do arquivo ini, a seção que desejamos ler, a chave da seção onde estão os dados e informamos um valor padrão que será usado se o arquivo não for encontrado ou se um dos valores não estiver definido no arquivo.
O código da função LeArquivoINI que irá obter os valores do arquivo INI e exibir nas caixas de texto é dado a seguir:
' Usa a função GetPrivateProfileString para obter os valores Private Function LeArquivoINI(ByVal file_name As String, ByVal section_name As String, ByVal key_name As String, ByVal default_value As String) As String
Return string_builder.ToString() End Function |
A rotina nomeArquivoINI() apenas obtêm o caminho da pasta \bin do aplicativo e acrescenta o nome do arquivo .INI : macoratti.ini:
' Retorna o nome do
arquivo INI
Private
Function nomeArquivoINI()
As
String
nome_arquivo_ini = nome_arquivo_ini.Substring(0, nome_arquivo_ini.LastIndexOf( "\"))Return nome_arquivo_ini & "\macoratti.ini" End Function |
Vamos agora tratar da rotina que efetua a gravação dos dados no arquivo macoratti.ini. Aqui temos um recurso para poder gerar um hash da senha e gravar no arquivo .ini. É por isso que usamos a classe MD5CryptoServiceProvider() do namespace Imports System.Security.Cryptography.
Para salvar os dados no arquivo .ini usamos a rotina
Private Sub gravaArquivoini()Dim nome_arquivo_ini As String = nomeArquivoINI() Dim valorSenha As String If chkCifrar.Checked Then valorSenha = geraHash(txtSenha.Text) ElsevalorSenha = txtSenha.Text End IfWritePrivateProfileString( "Geral", "MsgEmpresa", txtMensagem.Text, nome_arquivo_ini)WritePrivateProfileString( "Geral", "LogoEmpresa", txtLogoTipo.Text, nome_arquivo_ini)WritePrivateProfileString( "Seguranca", "Password", valorSenha, nome_arquivo_ini)WritePrivateProfileString( "Seguranca", "Administrador", txtAdmin.Text, nome_arquivo_ini)End Sub |
O código da rotina geraHash que será usada, somente se o usuário marcar esta opção no formulário, é o seguinte:
Private Function geraHash(ByVal valor As String) As String'Crria um objeto encoding para assegurar o encoding padrão para o texto fonte Dim Ue As New UnicodeEncoding() 'Retorna um array de bytes baseado no texto fonte Dim ByteSourceText() As Byte = Ue.GetBytes(valor) 'Instancia um objeto MD5 Dim Md5 As New MD5CryptoServiceProvider() 'Calcula o valor do hash para o texto Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
End Function |
Percebeu como é fácil gerar um hash na plataforma .NET ? A vantagem em usar um hash é que ele praticamente inviolável e se uma pessoa mal intencionada obter o seu valor não terá a senha , apenas o seu hash.
Para gravar os dados chamamos a rotina no evento Click do botão de comando e no evento Closing do formulário:
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Clickgravaarquivoini() End Sub |
gravaarquivoini() End Sub |
Ao executar o projeto iremos obter:
Eu não estou encorajando você a usar os arquivos .INI, eles podem ter uma certa utilidade em certas ocasiões, e têm algumas vantagens sobre o registro do Windows pois são fáceis de editar, visualizar e compartilhar em uma rede local; com o registro do Windows não podemos fazer isto. Além disso você pode ter múltiplas configurações gerando diversos arquivos INI cada um com o nome do seu usuário.
Pegue o projeto completo aqui : backupDAO_Net.zip
Com VB.NET você pode , então vá...
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET