Leer y escribir de un archivo INI. Visual Basic
Visual Basic 11 marzo 2008
Antes de la aparición del registro de 32 bits de Windows (Windows 95), si se deseaba guardar todo tipo de parámetros de la aplicación, tales como el tamaño de la ventana inicial, se utilizaban los archivos INI. La mayoría de las aplicaciones almacenan esta información en el registro de Windows ahora, sin embargo, puede resultarte más fácil utilizar archivos INI por ahora.
Una de las ventajas de la utilización de los archivos INI, es que se puede editar fácilmente los archivos manualmente y también, las opciones pueden ser fácilmente eliminadas. Los archivos INI tienen la siguiente estructura:
[SectionName]
KeyName1 = KeyValue
KeyName2 = KeyValue
Para un ejemplo de los archivos INI, busca en el archivo Win.ini que guarda en su directorio de Windows.
El siguiente código muestra cómo leer y escribir en un archivo INI con visual basic. Crea un nuevo proyecto y añade un módulo. Luego agrega el siguiente código:
Private 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
Private 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
‘// Funciones
Function GetFromINI(sSection As String, sKey As String, sDefault As String, sIniFile As String)
Dim sBuffer As String, lRet As Long
sBuffer = String$(255, 0)
‘ Llama a la DLL
lRet = GetPrivateProfileString(sSection, sKey, “”, sBuffer, Len(sBuffer), sIniFile)
If lRet = 0 Then
‘ fallo de la DLL, save default
If sDefault <> “” Then AddToINI sSection, sKey, sDefault, sIniFile
GetFromINI = sDefault
Else
‘ DLL con existo
‘ return string
GetFromINI = Left(sBuffer, InStr(sBuffer, Chr(0)) – 1)
End If
End Function
‘// Devuelve True si todo va bien. Si la sección no
‘// existe la crea.
Function AddToINI(sSection As String, sKey As String, sValue As String, sIniFile As String) As Boolean
Dim lRet As Long
‘ Llama a la DLL
lRet = WritePrivateProfileString(sSection, sKey, sValue, sIniFile)
AddToINI = (lRet)
End Function
Puedes usar este codigo para escribir y leer de archivos ini.
Vota este artículo:
Posts anterior y posterior:
Posts Relacionados:
- Previo: « Encriptar una contraseña en visual basic.
- Siguiente: Macro para calendario en Excel. »

marzo 13th, 2008 a las 4:42 pm
Ok amigo, pero sigues declarando en Private ‘ByVal lpKeyName As Any’ cosa que no admite el VB 2008. Este código lo encontré en http://www.canalvisualbasic.net/ y lo modifique en la parte de boolean porque no me daba, aquí adjunto lo que utilice:
Module Ini
Public Class ArchivosIni
‘ Funciones API
Private Declare Ansi Function GetPrivateProfileString Lib “kernel32.dll” Alias “GetPrivateProfileStringA” (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As System.Text.StringBuilder, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
Private Declare Ansi Function WritePrivateProfileString Lib “kernel32.dll” Alias “WritePrivateProfileStringA” (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
Private Declare Ansi Function GetPrivateProfileInt Lib “kernel32.dll” Alias “GetPrivateProfileIntA” (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Integer, ByVal lpFileName As String) As Integer
Private Declare Ansi Function FlushPrivateProfileString Lib “kernel32.dll” Alias “WritePrivateProfileStringA” (ByVal lpApplicationName As Integer, ByVal lpKeyName As Integer, ByVal lpString As Integer, ByVal lpFileName As String) As Integer
Dim strFilename As String
‘ Constructor, acepta un nombre de fichero (si no existe se creará)
Public Sub New(ByVal Filename As String)
strFilename = Filename
End Sub
‘ Propiedad para Read-only
ReadOnly Property FileName() As String
Get
Return strFilename
End Get
End Property
Public Function ObtenerString(ByVal Seccion As String, ByVal Clave As String, ByVal [Default] As String) As String
‘ Devuelve una cadena desde tu archivo INI
Dim intCharCount As Integer
Dim objResult As New System.Text.StringBuilder(256)
intCharCount = GetPrivateProfileString(Seccion, Clave, [Default], objResult, objResult.Capacity, strFilename)
If intCharCount > 0 Then ObtenerString = Left(objResult.ToString, intCharCount)
End Function
Public Function ObtenerInteger(ByVal Seccion As String, ByVal Clave As String, ByVal [Default] As Integer) As Integer
‘ Devuelve un número desde tu archivo INI
Return GetPrivateProfileInt(Seccion, Clave, [Default], strFilename)
End Function
Public Function ObtenerBoolean(ByVal Seccion As String, ByVal Clave As String, ByVal [Default] As Boolean) As Boolean
‘ Devuelve un valo lógico desde un archivo INI
Return ObtenerString(Seccion, Clave, [Default])
End Function
Public Sub EscrbirString(ByVal Seccion As String, ByVal Clave As String, ByVal Valor As String)
‘ Escribe una cadena a un archivo INI
WritePrivateProfileString(Seccion, Clave, Valor, strFilename)
Flush()
End Sub
Public Sub EscrbirInteger(ByVal Seccion As String, ByVal Clave As String, ByVal Valor As Integer)
‘ Escribe un número a un archivo INI
EscrbirString(Seccion, Clave, CStr(Valor))
Flush()
End Sub
Public Sub EscrbirBoolean(ByVal Seccion As String, ByVal Clave As String, ByVal Valor As Boolean)
‘ Escribe un valor logico a un arhcivo INI
EscrbirString(Seccion, Clave, Valor)
Flush()
End Sub
Private Sub Flush()
‘ Stores all the cached changes to your INI file
‘ Guarda todos los cambios al archivo INI
FlushPrivateProfileString(0, 0, 0, strFilename)
End Sub
End Class
End Module
Con este modulo podemos escribir y leer ( integer, string y boolean) valores de un archivo *.ini
Y cuando quería guardar los datos:
Public Class autorelleno_frm
Private Archivo_Ini As New ArchivosIni(“C:\Config.ini”)
‘Para guardar los datos
Private Sub guardar_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles guardar_btn.Click
‘Escribimos los cambios en el .ini
Archivo_Ini.EscrbirString(“Encargado”, “Nombre”, encargado_txt.Text)
Archivo_Ini.EscrbirInteger(“Recarga”, “Inicio”, iniciar_txt.Text)
‘Mostramos un mesaje afirmando los cambios
MsgBox(“Los datos se guardaron con éxito!”, MsgBoxStyle.Information)
‘Asignamos los cambios hechos al nombre del encargado
encargado_btn.Text = Archivo_Ini.ObtenerString(“Encargado”, “Nombre”, “Nadie”)
End Sub
‘Para cargar los datos guardados en el .ini al iniciar el programa
Private Sub autorelleno_frm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Arch = CreateObject(“Scripting.FileSystemObject”)
‘Comprobamos si existe el Archivo .ini
If Arch.FileExists(“C:\Config.ini”) Then
‘Leemos los datos almacenados en el .ini
Dim Archivo_Ini As New ArchivosIni(“C:\Config.ini”)
Dim strData As String = Archivo_Ini.ObtenerString(“Encargado”, “Nombre”, “Nadie”)
Dim recarga As Integer = Archivo_Ini.ObtenerInteger(“Recarga”, “Inicio”, 1)
‘Asignamos los datos encontrados en el .ini a los diferentes controles
encargado_btn.Text = strData
encargado_txt.Text = strData
Else
‘Si no encuentra el Archivo .ini
‘Muestra un msg preguntando que es lo que pasa
If MsgBox(“¿Recien me instalaste?”, vbQuestion + vbYesNo + vbDefaultButton2, “¿Qué haz hecho?”) = MsgBoxResult.No Then
‘Si se borro el archivo manda un mensaje y pide que ingrese los datos otra vez
MsgBox(“Borraste el archivo que necesito”, MsgBoxStyle.Exclamation, “No lo hagas otra vez!!”)
End If
End If
End Sub
End Class
Asi fue como lo desarrolle y me dio muy buen resultado, en Visual Basic 2008.
Gracias por tu ayuda, espero que me aceptes cualquier otra consulta.
Pdta.: Tu código si funciona pero en VB 6 a partir del .net ya no da resultado.
marzo 13th, 2008 a las 9:40 pm
Gracias JBX por tu aporte, ya veo que me dará guerra cuando salte de versión.
Estos de mocosoft……… ya lo han hecho otra vez.
septiembre 25th, 2008 a las 2:06 pm
me puedes pasar el proyecto completo p leer archivos .ini