A megoldáshoz találunk két olyan függvényt a Windows API-ben, melyek elvégzik a munka nagy részét, így nekünk csak egy osztály létrehozása a feladatunk.
Készítsünk első lépésként egy belsőleg használt osztályt, melyben deklaráljuk a két Windows függvényt, megadva, hogy azok a Kernel32.dll-ben kaptak helyet. E két függvény felhasználásával képesek leszünk INI állományokba írni, illetve onnan kiolvasni adatokat.
Public Class Win32
<DllImport("kernel32")> _
Public Shared Function WritePrivateProfileString(ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
End Function
<DllImport("kernel32")> _
Public Shared Function GetPrivateProfileString(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 Integer
End Function
End Class
Ezek után már jöhet is az IniFile nevű osztály készítése.
Public Class IniFile
Private fileName As String
Az osztály konstruktorában kell megadnunk annak az állománynak a nevét, elérési útját, melyet kezelni akarunk. Itt nincs is más teendőnk, mint a kapott értéket eltárolni a későbbi felhasználás érdekében.
Public Sub New(ByVal FileName As String)
FileName = FileName
End Sub 'New
Létrehozunk két függvényt, melyek meghívják a szükséges Win API függvényeket. A WriteValue segítségével tudunk majd adatot írni az INI állományba. Ennek három paramétere van: a Section-ban adhatjuk meg, hogy melyik szekcióba írjuk az adatokat, a Key lesz a tárolandó adat megnevezése, míg a Value a tárolandó adat. Ez utóbbi object típusú, így bármilyen típusú adat tárolását elvégezhetjük, feltéve, hogy az konvertálható sztringgé. Mivel az INI állomány egy szöveges típusú állomány, így ott csak sztringek tárolhatók.
Public Sub WriteValue(ByVal Section As String, ByVal Key As String, ByVal Value As Object)
Win32.WritePrivateProfileString(Section, Key, Value.ToString(), fileName)
End Sub 'WriteValue
A másik függvényünk lesz a ReadValue, mellyel kiolvashatjuk a tárolt adatokat. Itt szintén három paramétert kell megadni: a Section és a Key egyezik az előbbivel, míg a Default paraméterben megadott adat akkor kerül felhasználásra, ha a kiolvasandó adat nem szerepel az INI állományban. Ekkor a Default paraméterben megadott érték kerül visszaadásra a függvény által.
Public Function ReadValue(ByVal Section As String, ByVal Key As String, ByVal [Default] As String) As String
Dim sb As New StringBuilder(512)
Win32.GetPrivateProfileString(Section, Key, [Default], sb, 512, fileName)
Return sb.ToString()
End Function