Leggere e Scrivere un File INI
Per leggere e scrivere su un file INI dobbiamo utilizzare 2 funzioni delle API. GetPrivateProfileString per leggere, e WritePrivateProfileString per scrivere.
Inseriamo in un modulo:
Option Explicit
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
Public 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
'Grandezza, in caratteri, del buffer puntato dal
'parametro lpReturnedString.
Public Const MaxBuf As Integer = 255
'Leggere una riga di un tipico file *.ini:
Public Function LeggiIni(ByVal nomeFileIni As String, nomeSezione As String, nomeChiave As String) As String
'nomeSezione = (lpApplicationName) nome della sezione in cui cercare il valore
'nomeChiave = (lpKeyName) nome della chiave in cui cercare il valore
'default = (lpDefault) se la chiave non può essere nel file ini, la funzione GetPrivateProfileString
copia la stringa default nel buffer di lpReturnedString buffer. Questo parametro non può essere NULL.
'nomeValore = (lpReturnedString) punta al buffer che riceve la stringa trovata
'MaxBuf = (nsize) grandezza, in caratteri, del buffer puntato dal parametro lpReturnedString.
'nomeFileIni = (lpFileName) nome del file *.ini da leggere
Dim default As String, nomeValore As String
Dim ret As Long
ContrNomeFile nomeFileIni
default = Chr$(0)
nomeValore = String$(MaxBuf, 0)
ret = GetPrivateProfileString(nomeSezione, nomeChiave, default, nomeValore, MaxBuf, nomeFileIni)
If ret <> 0 Then
LeggiIni = Left(nomeValore, ret)
Else
LeggiIni = ""
End If
End Function
'Scrivere una riga di un tipico file *.ini:
Public Sub ScriviIni(ByVal nomeFileIni As String, nomeSezione As String, nomeChiave As String, tempStringa As String)
'nomeSezione = (lpApplicationName) nome della sezione in cui cercare il valore
'nomeChiave = (lpKeyName) nome della chiave in cui cercare il valore
'nomeStringa = (lpString) stringa che deve essere scritta nel file. Se questo parametro è NULL, la chiave
associata sarà cancellata.
'nomeFileIni = (lpFileName) nome del file *.ini da leggere
Dim ret As Long, nomeStringa As String
If tempStringa <> "" Then nomeStringa = tempStringa
ContrNomeFile nomeFileIni
ret = WritePrivateProfileString(nomeSezione, nomeChiave, nomeStringa, nomeFileIni)
End Sub
Public Sub ContrNomeFile(nomeIni As String)
'Controlla se il file sia completo di estensione e
se è senza un percorso specificato gli assegna il percorso dell'applicazione
If InStr(nomeIni, ".") = 0 Then nomeIni = nomeIni & ".ini"
If InStr(nomeIni, "\") = 0 Then nomeIni = App.Path & "\" & nomeIni
End Sub
Per fare un esempio, poniamo che dobbiamo creare un file ini chiamato
"Utente.ini", che debba contenere 2 Sezioni cosi composte:
[Utente]
Default=Gianni Marzio
[NomeUtenti]
NumeroUtenti=3
Nome1=Tizio
Nome2=Caio
Nome3=Sempronio
In un Form inserire 2 CommandButton e settare queste proprietà:
Form1.AutoRedraw=True
1° CommandButton
(Name)=cmdScrivi
Caption=Scrivi File INI
2° CommandButton
(Name)=cmdLeggi
Caption=Leggi File INI
Inserire questo codice:
Option Explicit
Dim FileIni As String
Private Sub cmdScrivi_Click()
'scrive la prima Sezione (Utente), chiave (Default), valore (Gianni Marzio)
ScriviIni FileIni, "Utente", "Default", "Gianni Marzio"
'scrive la seconda Sezione (NomeUtenti), chiave (NumeroUtenti), valore (3)
ScriviIni FileIni, "NomeUtenti", "NumeroUtenti", "3"
'scrive la seconda Sezione (NomeUtenti), chiave (Nome1), valore (Tizio)
ScriviIni FileIni, "NomeUtenti", "Nome1", "Tizio"
'scrive la seconda Sezione (NomeUtenti), chiave (Nome2), valore (Caio)
ScriviIni FileIni, "NomeUtenti", "Nome2", "Caio"
'scrive la seconda Sezione (NomeUtenti), chiave (Nome3), valore (Sempronio)
ScriviIni FileIni, "NomeUtenti", "Nome3", "Sempronio"
End Sub
Private Sub cmdLeggi_Click()
Dim NomeDefault As String, NomeUtenti(3) As String
Dim NumUtenti As Integer, i As Integer
Form1.Cls
'legge la prima Sezione (Utente), chiave (Default)
NomeDefault = LeggiIni(FileIni, "Utente", "Default")
'legge la seconda Sezione (NomeUtenti), chiave (NumeroUtenti)
NumUtenti = Val(LeggiIni(FileIni, "NomeUtenti", "NumeroUtenti"))
'carica dal file ini il nome degli utenti
Print NomeDefault
For i = 1 To NumUtenti
'legge la seconda Sezione (NomeUtenti), chiave (Nome) & incremento di (i)
NomeUtenti(i) = LeggiIni(FileIni, "NomeUtenti", "Nome" & CStr(i))
Print NomeUtenti(i)
Next i
End Sub
Private Sub cmdEsci_Click()
Unload Me
End Sub
Private Sub Form_Load()
FileIni = App.Path & "\Utente.ini"
End Sub
Testato su: Windows 98, Windows Me, Windows 2000 Professional