VB.NET – Einstellungen in .INI Datei speichern und auslesen

 in Entwicklung



Heute erkläre ich wie du unter VB.NET Einstellungen bzw. Inhalte oder Angaben aus einer TextBox, CheckBox o.ä. per Buttonclick in eine .INI Datei speichern und wieder auslesen kannst.

1. Folgende Imports Anweisung benötigen wir. Diese trägst du ganz oben außerhalb der Deklaration ein

1
2
3
Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Text

2. Nun deklarieren wir unsere Speicherfunktion

1
2
3
4
5
6
Private Declare Ansi Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
 ByVal lpApplicationName As String, _
 ByVal lpKeyName As String, _
 ByVal lpString As String, _
 ByVal lpFileName As String) _
As Integer

3. Die .INI Datei muss an einem festen Pfad gespeichert werden. Hierzu habe ich mich entschieden, diese in dem Ordner zu speichern, aus dem auch unsere spätere Anwendung gestartet wird. Damit wir die Pfadangabe so dynamisch gestalten können, weißen wir dem Wert sAppPath den String Application.StartupPath zu der unserer Anwendung dann automatisch den Speicherpfad unserer Anwendung verrät.

1
2
Dim sAppPath As String
        sAppPath = Application.StartupPath
4.  Nun kommen wir an das Speichern der Inhalte in die .INI Datei. Hierzu übergeben wir den Inhalt z.B. einer TextBox an einen festen Wert. Dies geschieht mit

1
 Dim SMTPServerW = SMTPServerT.Text

In meinem Beispiel hatte ich die TextBox1 in SMTPServerT umbenannt. Bei der Benennung deiner Formulare bist du natürlich frei. Wir übergeben also an den Wert SMTPServerW den Inhalt aus der TextBox SMTPServerT.Text.
Mit

1
WritePrivateProfileString("SMTP-Einstellungen", "SMTPServer", SMTPServerW, sAppPath & "\Settings.ini")

legen wir den Aufbau der .INI Datei fest und speichern diese auch an dem davor deklarierten Pfad ab.
Obige zwei Codezeilen können wir beliebig oft wiederholen. Wichtig ist das du jede TextBox neu deklarierst und auch in der zweiten Codezeile den dritten Wert für den Inhalt an die weitere Deklaration anpasst. Den ersten Wert (Überschrift der Einstellungen) kannst du ebenfalls frei abändern.

Die Ini Datei würde mit mehreren Textfeldern nach dem speichern enstprechend so aussehen.

[SMTP-Einstellungen]
SMTPServer=mail.gmx.net
SMTPPort=587
Absender=xxxxx@gmx.de
Passwort=****

An erster Stelle haben wir in der INI dann die Überschrift, an zweiter Stelle den Wert, an dritter Stelle den Inhalt unserer TextBox zu dem Wert und an vierter Stelle, den von uns festgelegten Pfad mit Namen der .Ini Datei.

WritePrivateProfileString(„SMTP-Einstellungen“, „SMTPServer“, SMTPServerW, sAppPath & „\Settings.ini“)

5. Soweit war es das mit der Speicherfunktion. Um die Daten wieder einlesen zu können, müssen wir eine neue Klasse erstellen, die ich INI.VB nenne. In dieser Klasse benötigen wir auch zwei Imports Anweisungen und die Lesen Funktion.

1
2
3
4
5
6
7
8
9
10
11
Imports System.Runtime.InteropServices
Imports System.Text
 
Public Class INI
     <DllImport("kernel32", EntryPoint:="GetPrivateProfileString")>
    Shared Function Lesen( _
    ByVal Sektion As String, ByVal Key As String, ByVal StandartVal As String, _
    ByVal Result As StringBuilder, ByVal Size As Int32, ByVal Dateiname As String) As Int32
 
    End Function
End Class

6. Um die Dateien nun aus einer .INI Datei wieder in die Anwendung einlesen zu können deklarieren wir wie bereits beim speichern den Pfad mit gleichem Code.

1
2
Dim sAppPath As String
        sAppPath = Application.StartupPath

7. Das Auslesen der .INI Datei erfolg nun quasi in gleicher Reihenfolge wie das abspeichern.
Wir deklarieren noch den Wert sb als neuer String (New StringBuilder(1024)).

1
2
Dim sb As StringBuilder
        sb = New StringBuilder(1024)

Nun lesen wir die Werte aus der .INI Datei Zeile für Zeile aus.

1
2
INI.Lesen("SMTP-Einstellungen", "SMTPServer", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
        SMTPServerT.Text = sb.ToString

An erster Stelle haben wir in der INI wie auch beim speichern die Überschrift, an zweiter Stelle den Wert, an dritter Stelle den Inhalt aus unserer TextBox und an vierter Stelle, den von uns festgelegten Pfad mit Namen der .Ini Datei.

INI.Lesen(„SMTP-Einstellungen“, „SMTPServer“, „“, sb, sb.Capacity, sAppPath & „\Settings.ini“)

Mit SMTPServerT.Text = sb.ToString fügen wir der TextBox in meinem Fall der SMTPServerT den Wert aus der .INI Datei ein. Mit diesen beiden Codezeilen können wir so Zeile für Zeile die .INI auslesen und die Werte in unsere TextBox, CheckBox o.ä. übergeben.

Das war es eigentlich auch schon.
Es bleiben dir nun mehrere Möglichkeiten hier noch IF-Abfragen einzubauen bzw. Die Einstellung anstelle eines Buttonclicks einzulesen direkt mit dem starten der Anwendung einzulesen. Bei Zweitem ist auf jeden Fall eine IF-Abfrage notwendig, für den Fall, dass die .INI Datei noch nicht existiert, da wir sonst eine Fehlermeldung erhalten.

Ich wünsche viel Spaß und biete hier zum Download noch ein Beispiel-Projekt an.

Download: Beispiel Projekt



  • timo

    Hammer, geiles Beispiel und total easy zu verstehen!
    Daumen hoch für diesen super Artikel.