Ini Dateien - wie kann ich welche benutzen ?

Sneaker

Mitglied
Hallo
Habe in der suche nix gefunden über ini dateien und frage jetzt welche klassen kann ich benutzen um in ini dateien zu schreiben und zu lesen und wie benutze ich sie
benutze VC++ 6 mit MFC unterstürzung

danke
 
mit WritePrivateProfileString() und GetPrivateProfileString()

Code:
#include <stdio.h>
#include <windows.h>

int main(int argc, char **argv)
{
	char temp[99];
	WritePrivateProfileString("GENERAL", "Variable", "Wert", "datei.ini");
	GetPrivateProfileString("GENERAL", "Variable", "Default", temp, sizeof(temp), "datei.ini");
	
	printf("%s\n", temp);
	return 0;
}

das ist zwar kein MFC, geht aber auch mit MFC :)
"datei.ini" <- wenn keine volle pfadangabe verwendet wird, landet diese datei automatisch im windows verzeichnis...

und bei GetPrivateProfileString(), das "Default" würde in temp gespeichert werden, wenn es "Variable" in der datei "datei.ini" nicht gibt... wenn noch was unklar ist... fragen
 
Thx funktioniert wunderbar wobei cih abaer noch probleme mit dem auslesen der variablen habe weil ich nicht mit char arbeite sondern mit CString aber das werde ich auch ncoh schaffen

da ich ja so verschiedene Gruppen einrichtigen kann. ist es auch möglich irgendwie die namen der Gruppen sich zurück geben zu lassen wie in deinem Beispiel General ?!
Weil ich arbeite an einem Kontomanager mit datenbank verbindung und da könnte ich ja alles verschiedenen datenbanken abspeichern

edit: das lesen geht jetzt und hab in der MSDN alle funktionen gefunden mit denen ich halt solche dateien bearbeiten kann !
 
Zuletzt bearbeitet:
also mit GetPrivateProfileSectionNames() kann man (oder sollte man können) die verschiedenen "Gruppen" aus der INI datei auslesen... bei mir nimmt er immer nur die erste, hab auch sonst keine andere funktion gefunden... :rolleyes:

Code:
GetPrivateProfileSectionNames(temp, sizeof(temp), "datei.ini");

wenn du auch noch die werte aus der gruppe general auslesen willst, dann geht das so:

Code:
GetPrivateProfileSection("GENERAL", temp, sizeof(temp), "datei.ini");

falls das nich so ganz klappen sollte, musst du dir selbst eine funktion basteln, die die datei einliest und bearbeitet...
 
Wie kann ich ein DWORD in die INI schreiben?
Ich bekomme da immer ne Fehlermeldung

"Konvertierung des Parameters 3 von 'unsigned long' in 'const char *' nicht moeglich"
 
Einfach vorher die DWORD-Variable in einen String reinschreiben und dann den String speichern lassen.

Mit CString CString::Format( "%d", dwVariable ), furchtbar umständlich mit std::stringstream oder mit einem sprintf.
 
:-/
Sorry ich bin scheinbar zu blöd....

'CString::Format' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
 
Oh, sorry, das war nur als Beispiel für den Funktionsnamen gedacht. Du musst natürlich eine Variable vom Typ CString dafür haben. Also so:

Code:
CString   cstrDummy;

cstrDummy.Format( "%u", dwVariable );

Um an den (const) char* des Strings zu kommen, einfach

WritePrivateProfileString("GENERAL", "Variable", (const char*)cstrDummy, "datei.ini");

aufrufen. Evtl. kann man (const char*) auch weg lassen, der CString sollte das automatisch können.
 
Übrigens hat CString dafür auch den wunderbaren LPCTSTR-Operator.
Code:
WritePrivateProfileString("GENERAL", "Variable", LPCTSTR( cstrDummy ), "datei.ini");
Ist aber identisch mit const char* .

Evtl. kann man (const char*) auch weg lassen, der CString sollte das automatisch können.
Ja, sollte er, aber im Normalfall handelt man sich Probleme ein, wenn man darauf vertraut. Besonders wenn man CString und std::string parallel verwendet. Schönes Beispiel:
Code:
CString cstrTemp( "huhu!" );
std::string strTemp( cstrTemp ); // kommt Unsinn raus.
Eigentlich sollte der Compiler erkennen, dass cstrTemp hier auf einen char-Pointer gecastet werden sollte, um den entsprechenden Konstruktor von std::string aufzurufen, aber leider kommt nur Stuss dabei raus.
 
Zuletzt bearbeitet:
Zurück