Lectura de ficheros INI

Cristian
07 de Enero del 2004
Estube viendo que para la lectura de ficheros INI de configuracion se utiliza la funcion api Getprivateprofilestring.
Todo bien, pero cuando lo intento no me funciona.
Les pongo el codigo que utilizo:
Primero hago la siguiente declaracion para utilizar posteriormente la API:


Public 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


Ahora creo una funcion a la que denomine LeeInis, la funcion la hice de la siguiente manera:

Public Function LeeIni(Section As String, Variable As String, FileName As String) As String
Dim Auxiliar As String
Auxiliar = Space(300)
LeeIni = GetPrivateProfileString(Section, Variable, "No se encontro", Auxiliar, Len(Auxiliar), "Prueba.ini")
LeeIni = RTrim(Auxiliar)
End Function


y Al final en el formulario pongo el siguiente codigo:

Private Sub Leer_Click()
Resultado.Text = LeeIni(Seccion.Text, Clave.Text, "Prueba.ini")
End Sub

Entonces , Primero declaro , despues hago una pqeueña funcion para leer y en el formulario cuando le doy click a leer , supuestamente me tiene que mostrar el valor de la variable que le solicito en el campo resultado.text.
Yo cree un archivo llamado Prueba.ini y le puse lo siguiente:
[GENERAL]
Prueba="Hola Mundo"

Pero en el campo resultado.text me muestra siempre el valor por defecto "No se ha encontrado"

Entonces, Donde esta el error?? , seguramente debe estar en la funcion , pero no lo logro encontrar , todos los ejemplos que vi en distintas paginas eran parecidos al mio.
Si alguno puede detectar el error le estaré agradecido

Un saludo!

rodrigogm78
07 de Enero del 2004
Aqui tienes el api con alguna aclaración. este api te sirve tanto para leer como para escribir .ini

rodrigogm78
07 de Enero del 2004
perdona no puse el api.
Posiblemente el fallo esté al llamar a GetPrivateProfileString(Section, Variable, "No se encontro", Auxiliar, Len(Auxiliar), "Prueba.ini")
prueba a poner el path completo en vez de "prueba.ini"
Aqui lo tienes la api

' Declaración de Funciones API de Windows
Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, _
ByVal lpFileName As String) As Long
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
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
La función de Grabar datos:

Sub Grabar_INI(Grabar As String, NombreSeccion As String, NombreCampo As String, DirectorioINI As String)
' Grabar - Contiene el texto que queremos grabar
' NombreSeccion - Los ficheros INI se clasifican en secciones, aquí le indicamos en que sección queremos grabar
' NombreCampo - EL campo donde queremos grabar el dato
' DirectorioINI - Indica el camino completo donde esta situado el fichero INI

Dim Res As Long
Res = WritePrivateProfileString(NombreSeccion, NombreCampo, Grabar, DirectorioINI)
End Sub
Para leer, hay que diferenciar si leemos una cadena o un número:

Function Leer_Cadena_INI(NombreSeccion As String, NombreCampo As String, DirectorioINI As String, _
Defecto As String) As String
' NombreSeccion - Los ficheros INI se clasifican en secciones, aquí le indicamos en que sección queremos grabar
' NombreCampo - EL campo donde queremos grabar el dato
' DirectorioINI - Indica el camino completo donde esta situado el fichero INI
' Defecto - Contiene el valor que devolvera la función en caso de que no exista
' ninguna valor para el campo que queremos leer

Dim Auxiliar As String * 400, Res As Long
Res = GetPrivateProfileString(NombreSeccion, NombreCampo, Defecto, Auxiliar, Len(Auxiliar), DirectorioINI)
Leer_Cadena_INI = Left$(Auxiliar, Res)
End Function

Function Leer_Numero_INI(NombreSeccion As String, NombreCampo As String, DirectorioINI As String, _
Defecto As Integer) As Long
' NombreSeccion - Los ficheros INI se clasifican en secciones, aquí le indicamos en que sección queremos grabar
' NombreCampo - EL campo donde queremos grabar el dato
' DirectorioINI - Indica el camino completo donde esta situado el fichero INI
' Defecto - Contiene el valor que devolvera la función en caso de que no exista ninguna
' valor para el campo que queremos leer

Leer_Numero_INI = GetPrivateProfileInt(NombreSeccion, NombreCampo, Defecto, DirectorioINI)
End Function




ermakina
07 de Enero del 2004
Pues usa por ejemplo :
open "windowswin.ini" for input as #1
while not eof(1)
line input #1,sql_buff
if ucase(left(sql_buff,len(seccion.text)))=ucase(seccion.text) then
while not eof(1)
line input #1,sql_buff
if ucase(left(sql_buff,len(resultado.text)))=ucase(resultado.text) then

end if
end if

wend

ermakina
07 de Enero del 2004
Pues usa por ejemplo :
close #1
open "windowswin.ini" for input as #1
while not eof(1)
line input #1,sql_buff
if ucase(left(sql_buff,len(seccion.text)))=ucase(seccion.text) then
while not eof(1)
line input #1,sql_buff
if ucase(left(sql_buff,len(resultado.text)))=ucase(resultado.text) then
msgbox (right(sql_buff,len(sql_buff)-len(resultado.text))
end if
wend
end if

wend
close #1

Cristian
07 de Enero del 2004
Gracias erka , pero necesito hacerlo mediante las apis , el parecer no contiene ningun error la funcion , no puedo sacar cual es el problema..