lunes, 22 de marzo de 2010

Leer y grabar datos en un archivo INI

Ejemplo que utiliza las funciones Api GetPrivateProfileString y WritePrivateProfileString para grabar y leer datos en un archivo de configuración ini

La función que lee es GetPrivateProfileString, la función que graba WritePrivateProfileString.
Las dos poeen casi los mismos parámetros: ( La ruta y nombre del archivo Ini, el nombre de La clave a leer o grabar, el Valor que se va a leer o grabar.)
Nota: La función GetPrivateProfileString, tiene un parámetro adicional ( ByVal lpDefault As String ) para los valores por defecto en caso de que no haya ningún dato que leer.
El siguiente ejemplo lo que hace es leer y almacenar en un archivo Ini ( ubicado en el App.Path del programa y llamado Config.ini), ..el ancho, alto, el Top y el Left del formulario.
En el evento FormLoad, se llama a la función de ajuste llamada Leer_Ini (Esta función retorna el valor leido )

Private Function Leer_Ini(Path_INI As String, Key As String, Default As Variant) As String

..en el evento Unload del formulario se llama a la función Grabar_Ini.
Private Function Grabar_Ini(Path_INI As String, Key As
String, Valor As Variant) As String

En el fichero Ini se almacenarán los datos de esta forma:
[MiPrograma]
Left=0
Top=0
Width=12165
Height=5000

Nota: Si el archivo ini no existe, la función api WritePrivateProfileString, lo crea automáticamente, o sea que no generará error de Acceso o ruta de archivo inexistente

Código fuente en el formulario
Option Explicit

Const APPLICATION As String = "MiPrograma"

Dim m_Left As Single
Dim m_Top As Single
Dim m_Width As Single
Dim m_Height As Single

Dim Path_Archivo_Ini As String

'Función api que recupera un valor-dato de un archivo Ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String,ByVal lpKeyName As String, _
ByVal lpDefault As String,ByVal lpReturnedString As String, _
ByVal nSize As Long,ByVal lpFileName As String) As Long

'Función api que Escribe un valor - dato en un archivo Ini
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String,ByVal lpKeyName As String, _
ByVal lpString As String,ByVal lpFileName As String) As Long


'Lee un dato _
-----------------------------
'Recibe la ruta del archivo, la clave a leer y _
el valor por defecto en caso de que la Key no exista
Private Function Leer_Ini(Path_INI As String, Key As String, Default As Variant) As String

Dim bufer As String * 256
Dim Len_Value As Long

Len_Value = GetPrivateProfileString(APPLICATION,Key, _
Default,bufer,Len(bufer),Path_INI)

Leer_Ini = Left$(bufer, Len_Value)

End Function

'Escribe un dato en el INI _
-----------------------------
'Recibe la ruta del archivo, La clave a escribir y el valor a añadir en dicha clave

Private Function Grabar_Ini(Path_INI As String, Key As String, Valor As Variant) As String

WritePrivateProfileString APPLICATION,Key,Valor,Path_INI

End Function


Private Sub Form_Load()

'Path del fichero Ini
Path_Archivo_Ini = App.Path & "\config.ini"

' Lee las Key y Les envia el valor por defecto por si no existe
m_Left = Leer_Ini(Path_Archivo_Ini, "Left", 0)
m_Top = Leer_Ini(Path_Archivo_Ini, "Top", 0)
m_Width = Leer_Ini(Path_Archivo_Ini, "Width", 5000)
m_Height = Leer_Ini(Path_Archivo_Ini, "Height", 5000)

'Posiciona el formulario con los valores del archivo Ini
Move m_Left, m_Top, m_Width, m_Height

End Sub

Private Sub Form_Unload(Cancel As Integer)

'Escribe en el archivo Ini

'Posición del Form
Call Grabar_Ini(Path_Archivo_Ini, "Left", Me.Left)
Call Grabar_Ini(Path_Archivo_Ini, "Top", Me.Top)

'Tamaño del formulario
Call Grabar_Ini(Path_Archivo_Ini, "Width", Me.Width)
Call Grabar_Ini(Path_Archivo_Ini, "Height", Me.Height)

End Sub

1 comentario:

  1. hola amigo disculpa el abuso yo no soy programador pero me gusta el asunto y tengo un problema yo hice una aplicacion cliente servidor que funciona de maravilla en vb6 y ahora lo tengo en vb 2008 yo en la version 6 le puse por llamrlos de alguna manera comandos para que el usuario final pudiera cambiar los colores font y todo lo que pudiera para que cuando el usuario volviera a abrir el programa toda esa configuracion se mateniera pero ahora que lo tengo en vb2008 ese codigo que use no me sirve para nada y en verdad e visto reeeeeevisto tanto que cada vez que leo algo nuevo entiendo menos ya que las personas que ponen los ejemplos explican muy pero muy poco como es el funcionamiento mira no se si pudieras darme una mano o por lo menos encaminarme en el asunto te dejo el codigo que usaba en vb6 para que tengas una idea como lo hacia :

    Private Sub GuardarColores()
    ' Guarda los Colores de la configuración (Suponiendo que es un Text multiline)
    Dim nFichero As Integer
    nFichero = FreeFile
    Open App.Path & "\Colores.cfg" For Output As #nFichero
    Print #nFichero, Text1.ForeColor
    Print #nFichero, Text1.BackColor
    Close #nFichero
    End Sub


    Private Sub CargarColores()
    ' Carga los Colores de la configuración (Suponiendo que es un Text multiline)
    Dim nFichero As Integer, nColor As Single
    On Error Resume Next
    nFichero = FreeFile
    Open App.Path & "\Colores.cfg" For Input As #nFichero
    Input #nFichero, nColor: Text1.ForeColor = nColor
    Input #nFichero, nColor: Text1.BackColor = nColor
    Close #nFichero
    End Sub

    ResponderEliminar