INI Abschnitt schreiben

Einen Abschnitt in eine INI-Datei schreiben

Das Schreiben eines kompletten Abschnitts erfolgt anlog dem Lesen bzw. unter Berücksichtigung der dort vorgestellten Besonderheiten. Der gesamte Inhalt der zu speichernden Sektion muss in einen einzelnen String gepackt werden, wobei „als Zeilentrenner“ das Chr(0)-Zeichen dient. Der String selbst muss mit einem endenden Chr(0)-Zeichen abgeschlossen werden.

AchtungAchtung: das Schreiben eines kompletten Abschnitts löscht unweigerlich einen vorhandenen Abschnitt; es erfolgt weder eine Warnmeldung noch erfolgt ein „Abgleich“. Man sollte also entsprechend vorsichtig mit dieser Funktion umgehen.

Das Zusammenfassen eines Abschnitts in einen einzelnen String zum Speichern in eine INI-Datei stellt sich deutlich einfacher dar, als das Auslesen und Auswerten eines Abschnitts aus einer INI-Datei; Bsp.:

"Key 01=Testwert  01" & Chr(0) & _
"Key 04=Testwert 04" & Chr(0) &  Chr(0)

Um einen Unterschied zu vorher festzustellen, ändern wir den Abschnittsinhalt für die Speicherung wie folgt ab:

  [Section 01]
  Schlüssel 01=Das
  Schlüssel 02=ist
  Schlüssel 03=ein
  Schlüssel 04=Test

Eine entsprechende Wrapper-Routine erhält bereits den vorbereiteten String, so dass sich diese Routine recht einfach darstellt.

Die hierzu notwendige Funktion WritePrivateProfileSection besitzt folgende 3 Argumente:

WritePrivateProfileSection
Argument Bedeutung Beispielwerte
lpAppName Name der Sektion bzw. des Abschnitts Section 01
lpString Die Abschnittsdaten s.o.
lpFileName Gültiger Pfad zur INI-Datei C:\WINNT\Dummy.ini

Der Rückgabewert der Funktion WritePrivateProfileSection ist bei Erfolg ungleich 0, sonst 0.

Beispiel:

' Section schreiben
Public Function WriteMySection(ByVal sIniFilePath As String, _
                               ByVal sSection As String, _
                               ByVal sRecord As String, _
                               ByRef sError As String) As Boolean
 
    Dim lResult As Long     'API-Rückgabewert
 
    lResult = WritePrivateProfileSection(sSection, sRecord, sIniFilePath)
    WriteMySection = CBool(lResult <> 0)
    If Not WriteMySection And Err.LastDllError <> 0 Then
        sError = GetDllErrorDescription(Err.LastDllError)
    End If
 
End Function

Als Test für die zuvor beschriebene Funktion dient folgende Routine:

Beispiel:

' Aufruf WriteMySection
Sub INI_Sample()
 
    Dim sINIPath    As String
    Dim sRecord     As String
    Dim sError      As String
 
   'Pfad zum Windows-Ordner ermitteln
    sINIPath = API_GetWindowsDir()
   'Backslash prüfen und ggf. hinzufügen
    If Right$(sINIPath, 1) <> "\" Then sINIPath = sINIPath & "\"
   'Unseren INI-Dateinamen anfügen
    sINIPath = sINIPath & "Dummy.ini"
   'Jetzt basteln wir den Abschnittsstring zusammen
    sRecord = "Schlüssel 1 = Das" & vbNullChar & _
              "Schlüssel 2 = ist" & vbNullChar & _
              "Schlüssel 3 = ein" & vbNullChar & _
              "Schlüssel 4 = Test" & vbNullChar & vbNullChar
 
    If WriteMySection(sINIPath, "Section 01", sRecord, sError) = True Then
          MsgBox "OK"
    Else: MsgBox sError
    End If
 
End Sub