Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Daten / Dateien / Ini

INI-Dateien komfortabel lesen und schreiben

Einleitung

Motivation

Ini-Dateien sind einfache Text-Dateien, welche auch heute noch gerne zur schnellen Programm-Konfiguration benutzt werden. Sie sind einerseits auch durch den Anwender leicht änderbar (etwa mit Notepad), andererseits bieten sie durch die 2-stufige Hierarchie rudimentäre Möglichkeiten, die Daten darin zu strukturieren.

Die hier vorgestellten Routinen ermöglichen den komfortablen Zugriff auf beliebige Ini-Dateien. Da wohl zu 99% die zur VB-Anwendung "zugehörige" Ini-Datei benutzt wird, kann in solchen Fällen auf die Angabe des Ini-Pfads verzichtet werden.

Beispiele

'Standard-Ini auslesen:
s = IniRead("Bearbeiter", "Name")
'Standard-Ini mit Default auslesen:
s = IniRead("Bearbeiter", "Name", "-unbekannt-")
'Standard-Ini schreiben:
IniWrite "Bearbeiter", "Name", "Willi Wusel"
'beliebige Ini auslesen:
s = IniRead("Form1", "PosX", IniFile:="D:\Test\Layout.ini")

Code / Quelltext

API-Deklarationen

Fügen Sie folgende Zeilen im Deklarationsteil (am Besten eines Standardmoduls) ein:

Private Declare Function GetPrivateProfileStringA Lib "kernel32.dll" ( _
    ByVal lpSection As String, _
    ByVal lpSetting As String, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString As String, _
    ByVal nSize As Long, _
    ByVal lpFileName As String _
  ) As Long
Private Declare Function WritePrivateProfileStringA Lib "kernel32.dll" ( _
    ByVal lpSection As String, _
    ByVal lpSetting As String, _
    ByVal lpValue As String, _
    ByVal lpFileName As String _
  ) As Long

IniPath

Diese Funktion ermittelt den Pfad zur "Standard" Ini-Datei. Üblicherweise liegt diese Datei im EXE-Verzeichnis, hat den selben Namen wie die Anwendung mit der Dateiendung ".ini". Durch Nutzung einer statischen Variable muss der "Analysevorgang" nur beim ersten Aufruf durchgeführt werden.

' ©2003 by Jost Schwider, http://vb-tec.de/
Public Function IniPath() As String

  Static AppIniFile As String

  If Len(AppIniFile) = 0 Then
  
    If Right$(App.Path, 1) = "\" Then
      AppIniFile = App.Path & App.EXEName & ".ini"
    Else
      AppIniFile = App.Path & "\" & App.EXEName & ".ini"
    End If
  
  End If
  IniPath = AppIniFile

End Function

IniRead

Diese Funktion liest den Inhalt einer Ini-Datei aus (genauer: den Wert eines Keys in einer bestimmten Section). Optional können übergeben werden: ein Standardwert Default (wird zurück gegeben, falls kein korrespondierender Eintrag in der Ini-Datei existiert) und/oder der Pfad zu einem alternativen IniFile.

' ©2003 by Jost Schwider, http://vb-tec.de/
Public Function IniRead( _
    ByRef Section As String, _
    ByRef Key As String, _
    Optional ByRef Default As String, _
    Optional ByRef IniFile As String _
  ) As String

  Dim s As String * 256
  Dim n As Long

  If Len(IniFile) Then
    n = GetPrivateProfileStringA(Section, Key, Default, s, 255, IniFile)
  Else
    n = GetPrivateProfileStringA(Section, Key, Default, s, 255, IniPath)
  End If
  IniRead = Left$(s, n)

End Function

IniWrite

Diese Prozedur schreibt in eine Ini-Datei (genauer: den Wert eines Keys in einer bestimmten Section). Optional kann übergeben werden: der Pfad zu einem alternativen IniFile. Bei Problemen (Ini-Datei kann nicht beschrieben werden) löst die Routine einen abfangbaren Fehler aus.

' ©2003 by Jost Schwider, http://vb-tec.de/
Public Sub IniWrite( _
    ByRef Section As String, _
    ByRef Key As String, _
    ByRef Value As String, _
    Optional ByRef IniFile As String)

  Dim n As Long

  If Len(IniFile) Then
    n = WritePrivateProfileStringA(Section, Key, Value, IniFile)
  Else
    n = WritePrivateProfileStringA(Section, Key, Value, IniPath)
  End If
  If n = 0 Then Err.Raise 5 'Invalid procedure call or argument

End Sub

© Jost Schwider, 07.02.2003-07.02.2003 - http://vb-tec.de/inifile.htm