Registry und INI-Dateien

Willemers Informatik-Ecke

INI oder Registry

Wenn man in seinem Programm Zustände sichern möchte, die beim nächsten Programmstart erhalten bleiben sollen, gibt es zwei APIs, um dies zu erreichen: die althergebrachten INI-Dateien und die neue Registry.

Die INI-Datei ist eine normale Textdatei, die mit einem Editor bearbeitbar ist. Die Registry ist eine Art Datenbank, die mit dem Programm REGEDIT bearbeitet werden kann, aber nicht mehr mit einem einfachen Editor. Aufgrund des Datenbank-Charakters ist die Registry natürlich effizienter und es ist auch die Instanz, die von Microsoft empfohlen wird. Die INI-Datei wird gern verwendet, wenn es um Kompatibilität zu Windows 3.x oder OS/2 geht.

Registry

Die Registry enthält die Konfigurationsparameter von Windows und den Applikationen, die sich hier eintragen. Sie kann mit dem Programm REGEDIT bearbeitet werden.

Auslesen der Registry

DWORD dType = REG_SZ;
	
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Programm\\Thema", 
                 0, KEY_READ, &hKey)==ERROR_SUCCESS ) {
    if( !RegQueryValueEx(hKey,"StringValue", 0, &dType, 
                         (LPBYTE)String, &lStringLen) ) {
        // verarbeite den Wert in String
    }
    RegCloseKey(hKey);

INI-Dateien

Der Aufbau einer INI-Datei ist den meisten Windows-Anwendern bekannt. Es ist eine maximal 64 KB große Textdatei, die mit einem Editor bearbeitet werden kann. Die Datei ist in Sektionen unterteilt, in denen jeweils Schlüsselvariablen mit Werten vorbesetzt werden.
[section1]
  key1=value1
  key2=value2
[section2]
  key1=value1
  key2=value2

Arbeiten mit der WIN.INI

Das Hinterlegen in der WIN.INI ist die einfachste Art, Informationen abzustellen. Da aber die WIN.INI als zentrale Datei sehr schnell sehr unübersichtlich wird, sollte man sich bei den 32-Bit-Varianten dazu entschliessen, die Registry zu verwenden.

BOOL WriteProfileString(char *section, char *key, char *value);
DWORD GetProfileString(char *section, char *key, char *default, 
                       char *value, DWORD size);

Arbeiten mit eigenen INI-Dateien

Das Abstellen in privaten INI-Dateien funktioniert exakt wie der Zugriff auf die WIN.INI. Allerdings muss hier zusätzlich der Dateiname angegeben werden. Wird nur der Dateiname ohne Pfad angegeben, wird die Datei im Windows-Verzeichnis abgestellt. Es können so zentrale, applikationsspezifische Dateien erstellt werden, ohne die WIN.INI aufzublähen.

Gibt man aber den gesamten Pfad an, wie man ihn bei der Verwendung der Standard Dateiauswahlbox bekommt, kann man sich viel Arbeit mit der Bearbeitung eigener Dateiformate sparen, indem man eine INI-Datei verwendet.

BOOL WritePrivateProfileString(char *section, char *key, 
                               char *value, char *filename);
DWORD GetPrivateProfileString(char *section, char *key, char *default, 
                              char *value, DWORD size, char *filename);

Homepage - Windows-API-Programmierung (C) Copyright 2000 Arnold Willemer