[VC++] Frage zu ini Dateien

Buba235

Erfahrenes Mitglied
Hallo Leute!

Ich hab mal eine Frage, wie der Titel schon sagt, zu ini Dateien. Und zwar betrifft es die sogenannten Subgroups in ini files. Gibt es eine Windowsfunktion, mit der ich Subgroups erstellen kann, oder muss ich mich darum selber kümmern? Wenn ich mich darum selber kümmern muss, dann stellt sich mir die Frage wie ich das machen soll. Könnt ihr mir bei meinem Problem bitte helfen? Das ganze sieht bei mir wie folgt aus: Ich habe eine Klasse, die sich Settings nennt. Darin gibt es eine Methode (beginGroup()) mit der ich die Sections in der ini Datei festlege. Alle Werte die in das file geschrieben werden (mit WritePrivateProfileString), werden in diese Sektion geschrieben. Wird jetzt die Methode endGroup() aufgerufen, dann ist diese Section erledigt und mit einem neuerlichen Aufruf von beginGroup() wird eine neue Section in das ini file geschrieben. Okay soweit zu Aufbau. Jetzt will ich aber wenn ich beginGroup() zweimal hintereinander mit dem gleichen Namen aufrufe, dass es eine Subgroup gibt:
Code:
Settings test();
test.beginGroup("Gruppe1");
test.beginGroup("Gruppe1");
test.setValue("Value", 15);
test.endGroup();
test.setValue("Value2", 100);
test.endGroup();

soll folgendes ergeben:

Code:
[Gruppe1]
Gruppe1/Value=15
Value2=100

Ich hoffe ich konnte es einigermaßen erklären und dass ihr mir helfen könnt.

Gruß
Buba
 
Uhhmm, ich bin zwar ein oller VB-ler, und habe nicht unbedingt die Ahnung von C/C++, aber ich glaube mich daran zu erinnern, dass ihr C++-ler irgendwie direkten Zugriff auf die Win-API habt (Also benutzen der Win-API's als ganz normale Funktionen).

Es gibt ne Funktion namens "WritePrivateProfileString"

Ich habe in VB einen passenden Test durchgeführt zu deinen Beispiel-Daten oben:

Code:
WritePrivateProfileString "Gruppe1", "Gruppe1/Value", "15", "c:\Test.ini"

Wenn die INI nicht existiert, wird sie erstellt.
Wenn die Gruppe nicht existiert, wird sie erstellt.
Wenn der Schlüssel nicht existiert, wird er erstellt.

Die Ausgabe obiger Test-Funktion ergab folgende INI-Datei
Code:
[Gruppe1]
Gruppe1/Value=15

EDIT: Das Gegenstück zu "WritePrivateProfileString" heisst "GetPrivateProfileString"

EDIT2: Wupps, habe gerade erst gesehen dass die Funktion ja bekannt ist.
Ich würde es per String-Zusammenbau lösen
 
Zuletzt bearbeitet:
Nachdem ich etwas darüber nachgedacht habe, würde ich es so lösen:

Eine Klassenweite Membervariable, welche die Aufrufe von BeginGroup mitzählt.
Wenn BeginGroup aufgerufen wird, wird die Variable um 1 erhöht,
wenn endGroup aufgerufen wird, wird sie um 1 verringert.
(Analog dem Referenzzähler einer Klasse).
Wenn SetValue aufgerufen wird, wird geprüft:
If Zähler=2 then
//Es ist eine SubGruppe
//String-Verkettung von Gruppenname und Schlüssel -->Ergibt dann Gruppe1/Value

If Zähler=1 then
//Es ist ein "Normaler" Eintrag
 
Hallo!


Danke für euere Hilfe! Ich hab es mittlerweile gelöst. Meine Lösung ist mit einem "Stack", bei dem ich push() und pop() verwende. Damit kann ich immer überprüfen wo ich gerade bin. Im Prinzip ist es deine Antwort @Zvoni!

Danke noch einmal!
 
Zurück