Probleme beim Einlesen einer INI-Datei

dtt

Grünschnabel
Liebe Forum-Community,

ich möchte mit VC++ 6 eine selbsterstelle INI-Datei einlesen und im weiteren Programmverlauf
auf die gespeicherten Werte zugreifen. Wie kann ich das am Einfachsten realisieren?

Die INI soll folgendes Format haben:
[abschnitt1]
variable1=wert1;
variable2=wert2;
...

Ich habe bereits mehrere Methoden versucht, aber mir gelingt es nicht, den Wert von der Variable zu trennen (bin noch Anfänger). :(

Kann mir hier jemand weiterhelfen und hat vielleicht sogar jemand ein Code-Beispiel für mich?
Wäre klasse...
 
Ein Codebeispiel kann ich dir bei Gelegenheit raussuchen, aber es ist einfach, wenn du GetPrivateProfileString(), GetPrivateProfileInt() und so weiter verwendest. Die sind in der MSDN Lib gut dokumentiert. Doku online
 
Das klingt schon mal vielversprechend, danke :)

Wenn du noch ein Code-Beispiel findet, wäre es super, wenn du es posten könntest...
 
Eigentlich ist es wirklich sehr einfach, aber das Schreiben von Zahlen ist etwas nerviger, deshalb hier ein Beispiel, wo einfach nur ein int gelesen und sofort wieder gespeichert wird:
Code:
#define DEFAULTVALUE_MATCHES (4711)
 
// Einlesen (hier mit int)
int iMatches = GetPrivateProfileInt( "Verschiedenes", "Matches", DEFAULTVALUE_MATCHES, "MeineIni.ini" );

// Schreiben
char szTemp[80];
wsprintf( szTemp, "%d", iMatches );
WritePrivateProfileString( "Verschiedenes", "Matches", szTemp, "MeineIni.ini" );

// Code ungetestet!
Übrigens dürfen ini-Dateien nur 32K gross werden, wenn man die PrivateProfile-Funktionen verwendet.
 
Habe nun folgende INI:

[section]
keyA=1


und folgenden Code:

#define DEFAULTVALUE_MATCHES (4711)

int iMatches = GetPrivateProfileInt( "section", "keyA",
DEFAULTVALUE_MATCHES, "meine.ini" );

printf("%d gefunden!\n", iMatches);
getch();


ich bekomme aber immer 4711 ausgegeben und nicht die 1.
was mach ich falsch?
 
Ich vermute, dass die Datei nicht gefunden wird. Gib mal den absoluten Pfad an.

Sonst entdecke ich keine Probleme.
 
Daran lags, vielen Dank!

Gibt es auch einen Trick, dass ich keinen absoluten Pfad angeben muss?
 
Nicht wirklich. Man kann zwar mit SetCurrentDirectory() arbeiten, aber es ist immer sicherer, einen absoluten Pfad zusammenzubauen. Du könntest zum Beispiel GetModuleFileName() verwenden, um den Pfad der Exe herauszubekommen, und dann deinen relativen Pfad anhängen. Also gibt es doch eine Möglichkeit... ach, hör nicht zu, ich bin zu vollgefressen, um vernünftig zu schreiben... ;)
 
lol, ok, hat grad auf die Schnelle auch nicht so wirklich geklappt. Aber ich kann das doch über #define constant definieren oder nicht?
Wie müsste das aussehen?
#define ini = "\\meine.ini" tut nicht so wirklich

ok läuft *g*
const char* ini = "meine.ini"

vielen dank für deine hilfe
 
Zuletzt bearbeitet:
Sämtliche Profile-Befehle funktionieren NUR mit absoluten Pfaden. Nicht absolute Pfade werden als im Windows-Verzeichnis liegend betrachtet, und das ist vermutlich nicht der Sinn der Sache.

GetModuleFileName ist schon ganz richtig, man muss nur den EXE-Dateinamen entfernen und dann den relativen Pfad anhängen.

Wenn ein Pfad absolut ist, ist damit nicht const gemeint, sondern dass der Pfad komplett ist, also z. Bsp: Laufwerk:/Dir1/Dir2/usw... heisst.
 
Zurück