Rubrik: Dateisystem · INI-Dateien | VB-Versionen: VB4, VB5, VB6 | 20.02.01 |
Verwalten von INI-Dateien Zeigt wie man Daten aus INI-Dateien liest bzw. in INI-Dateien speichern kann. | ||
Autor: LonelySuicide666 | Bewertung: | Views: 33.287 |
www.vbapihelpline.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
INI-Dateien eignen sich hervorragen, um kleinere Datenmengen zu verwalten (speichern und lesen). Unser nachfolgender Tipp demonstriert die Vorgehensweise, um bestimmte Daten in eine solche INI-Datei zu speichern und wieder auszulesen.
' zunächst die benötigten API-Deklarationen ' Achtung, die Originale wurden etwas umbenannt ' Orginal: ' Private 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 ' ' Private 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 ' Special-Variante Private Declare Function ReadIni 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 Private Declare Function WriteIni Lib "kernel32" _ Alias "WritePrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String) As Long ' Der Inhalt, welcher aus der INI-Datei ausgelesen wird, ' landet in RetStr Private RetStr As String ' INI-Dateien sind folgendermaßen aufgebaut: ' Es gibt einen Applications Teil, welcher in ' eckigen Klammern steht ' Beispiel: [Programm Config] ' Darunter stehen dann die Key's; Name = Inhalt ' ' Eine INI-Datei, in der z.B. die Koordinaten einer Form ' gespeichert sind könnte so aussehen: ' [Form1] ' Left=200 ' Top=200 ' Width=400 ' Hight=300 ' Caption="Ini Lesen/Schreiben von Lonely Suicide 666" ' ' Nachfolgendes Beispiel demonstriert, wie man die Koordinaten ' und die Caption-Eigenschaft einer Form in einer INI-Datei ' speichert und wieder einliest ' ' INI-Daten lesen und Form-Eigenschaften setzen Public Function Get_FormConfig(ByRef F As Form, _ ByVal IniPath As String) ' RetStr mit 256 Leerzeichen füllen RetStr = Space(256) ' Anmerkung: Wird anstelle des lpApplicationName ' ein Nullstring angegeben, erhält man alle Appliction- ' Namen der gesamten INI-Datei. ' Das gleiche gilt auch für die lpKeyName Eigenschaft ' Daten Lesen, wenn die INI-Datei nicht existiert, wird die ' Standard Left-Eigenschaft der Form zurückgegeben (F.Left) ReadIni F.Name, "Left", F.Left, RetStr, Len(RetStr), IniPath ' Nullcharzeichen abtrennen, in einen Long-Wert umwandeln ' und der Form zuweisen F.Left = CLng(Left$(RetStr, InStr(1, RetStr, _ vbNullChar) - 1)) ' Das gleiche nun für alle anderen Eigenschaften RetStr = Space(256) ReadIni F.Name, "Top", F.Top, RetStr, Len(RetStr), _ IniPath F.Top = CLng(Left$(RetStr, InStr(1, RetStr, _ vbNullChar) - 1)) RetStr = Space(256) ReadIni F.Name, "Width", F.Width, RetStr, Len(RetStr), _ IniPath F.Width = CLng(Left$(RetStr, InStr(1, RetStr, _ vbNullChar) - 1)) RetStr = Space(256) ReadIni F.Name, "Height", F.Height, RetStr, Len(RetStr), _ IniPath F.Height = CLng(Left$(RetStr, InStr(1, RetStr, _ vbNullChar) - 1)) RetStr = Space(256) ReadIni F.Name, "Caption", F.Caption, RetStr, _ Len(RetStr), IniPath F.Caption = Left$(RetStr, InStr(1, RetStr, vbNullChar) - 1) End Function ' Schreiben der Eigenschaften in die INI-Datei Public Function Set_FormConfig(ByVal F As Form, _ ByVal IniPath As String) ' Beim Schreiben der INI-Dateien gilt: ' Existiert die INI-Datei noch nicht, so wird sie angelegt ' Übergibt man einen NullString an den lpApplicationName ' oder lpKeyName werden alle Applicationen oder Key's ' (inkl. Werten) gelöscht ' Übergibt man z.B. anstelle von lpApplicationName und ' lpKeyName beidemale einen NullString, löscht man die ' gesamte INI-Datei ' Schreibt einen Eintrag in eine INI-Datei ' (Umwandeln in einen String nicht vergessen) WriteIni F.Name, "Left", CStr(F.Left), IniPath ' alle anderen Form-Eigenschaften WriteIni F.Name, "Left", CStr(F.Left), IniPath WriteIni F.Name, "Top", CStr(F.Top), IniPath WriteIni F.Name, "Width", CStr(F.Width), IniPath WriteIni F.Name, "Height", CStr(F.Height), IniPath WriteIni F.Name, "Caption", F.Caption, IniPath End Function ' Der nachfolgende Code ist für die Form bestimmt Private Sub Form_Load() ' Lesen der gespeicherten Daten (ggf. Dafult-Werte setzen) Get_FormConfig Me, App.Path & "\Config.ini" End Sub Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) ' Speichern der aktuellen Eigenschaften Set_FormConfig Me, App.Path & "\Config.ini" End Sub
Was geschieht genau?
Wird die Position und/oder Größe des Formulars durch den Anwender geändert, so werden diese beim Schließen des Fensters gespeichert, so daß bei einem erneuten Aufruf des Fensters die zuletzt eingestellten Werte wiederverwendet werden.
Anmerkung
INI-Dateien eignen sich besonders für das Speichern kleiner Datenmengen.
Was spricht für INI-Dateien?
+ Man verstopft nicht die Regestry
+ einfacher zu handhaben als sequentielle Dateien
Was spricht gegen INI-Dateien?
+ Zu langsam für große Datenmengen, da sollte man lieber auf Datenbanken zurückgreifen