Probleme beim Einlesen einer INI-Datei

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.
Einspruch! Aus eigener Erfahrung weiss ich, dass zumindest die PrivateProfile-Befehle zunächst im aktuellen Verzeichnis suchen. Mag sein, dass sie auch noch im Windowsverzeichnis nachschauen, wie es in der MSDN Lib steht.

Jedenfalls sollten absolute Pfade bevorzugt werden!
 
Gleiches Problem

Ich hab etwa das gleiche Problem, wollte eine Klasse erstellen in der in ein INI Datei geschrieben werden kann und gleichzeitig auch ausgelesen werden kann. Nun habe ich das Problem wie gebe ich den Wert an das HauptProgie zurück? Und wie rufe ich es auf im Hauptprogramm! Schreiben klappt wunderbar!

Hier der Code:
void CInI::schreiben()
{
WritePrivateProfileString("moon", "room", "Baschich", "c:\\temp\\Tool.ini");
return;
}

char CInI::lesen()
{
char temp[99];
GetPrivateProfileSection("GENERAL", temp, sizeof(temp), "c:\\temp\\Tool.ini");


return ?;

}

// im Hauptprog aufruf
?
 
Zuletzt bearbeitet:
Code:
char CInI::lesen()
{
char temp[99];
GetPrivateProfileSection("GENERAL", temp, sizeof(temp), "c:\\temp\\Tool.ini");


return ?;

}

Das sollte besser so aussehen (die Kommentare kannst du weglassen):
Code:
#include <string>

// ...

std::string lesen()
{
  char temp[99];
  
  //DWORD GetPrivateProfileString(
  //  LPCTSTR lpAppName,        // points to section name
  //  LPCTSTR lpKeyName,        // points to key name
  //  LPCTSTR lpDefault,        // points to default string
  //  LPTSTR lpReturnedString,  // points to destination buffer
  //  DWORD nSize,              // size of destination buffer
  //  LPCTSTR lpFileName        // points to initialization filename
  //);
  
  // du willst doch sicher den von dir
  // gespeicherten Wert zurücklesen, oder?
  GetPrivateProfileString(   "moon",   
                             "room", 
                             "default",
                             temp, 
                             99, 
                             "c:\\temp\\Tool.ini" );

  return std::string( temp );
}
Sieh dir bitte mal in der MSDN die Dokumentation an zu
GetPrivateProfileString() , WritePrivateProfileString() und zu std::basic_string.

Ausserdem empfehle ich ein gutes Buch über C++ für Einsteiger. Das würde die Hälfte deiner Probleme mit den Routinen lösen.
 
Zuletzt bearbeitet:
Hallo,

ich habe auch noch nicht viel Erfahrung in C++ und wollte mal dieses Beispiel ausprobieren aber ich weiß nicht was ich falsch gemacht habe, da er mir zurückgibt, er würde die Funktion "GetPrivateProfileString" nicht kennen!

hier mein Code
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define DEFAULTVALUE_MATCHES (4711)


int main(void)
{

int iMatches = GetPrivateProfileInt( "smart", "hdd",DEFAULTVALUE_MATCHES, "smart.ini" );

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

return 0;

}

Wäre super wenn mir jemand weiter helfen könnte.

Danke im Voraus.

gruß Michael
 
Du schreibst das in C, während oben der Code in C++ geschrieben ist. Das ist so direkt nicht kompatibel, da ihr verschiedene Bibliotheken benutzt. Ich weiß jetzt zwar nicht ob die Befehle, die kachelator genannt hat, in der iostream drinne stehen oder nicht, aber ganz bestimmt nicht in der stdio ;-)


MfG Radhad
 
hi,

ich habe jetzt noch die windows.h hinzugefügt, jetzt kompiliert er mir das prog,
aber er gibt mir immer nur den wert 4711 aus!
Auch wenn ich den Pfad absolut angebe.

Mein logfile sieht wie folgt aus:

Code:
[smart]

hdd=1
 
danke für die hilfe

ich habe meinen Fehler selbst gefunden:
windows hat mal wieder die Endung txt an die ini datei angehängt

xxx.ini.txt

hätte ich auch ehr drauf kommen können.
 
Hi! Ich habe auch noch solch ein Problem, nur muss ich einen Kompletten Text in eine Variable schreiben, wie geht das?

Meine ini:

Code:
  [HM_MP]
  Title=Testspiel
  Mode=0
  Zoom=0
"Testspiel" ist das entscheidende Wort.
 
Zuletzt bearbeitet:
Hi ich habe nun folgendes neues Problem, nachdem meine Frage wohl leider nicht beantwortet werden konnte habe ich weiter selbst versucht einen weg zu finden. Ich habe gerade eine gute Idee im Kopf mit der ich das umsetzen kann und bin gerade dabei die Idee in einen Quelltext umzuwandeln.





Naja, ich bin so weit gekommen:



Code:
 #include <stdio.h>

   #include <stdlib.h>

   #include <iostream.h>

   #include <string.h>

    

   void main(void)

   {

    

   			FILE *datei;

   			char bezeichnung[9];	//9 ist die Anzahl der Ziffern (- 1 wegen beginn ab 0) der Bezeichnung

   			strcpy(bezeichnung,"GameTitle=");

   			char fensterueberschrift[40], temp[4000];

   			int anz, a;

    

   			if((datei = fopen("HM_MP.ini","r")) == NULL)

   			{

   					    cout << "Fehler beim Oeffnen der Datei: RPG_RT.ini";

   					    exit(1);

   			}

    

   			anz = fread(temp,sizeof(char),4000,datei);

   			temp[anz]=NULL;

   			cout << temp;

    

   			fclose(datei);

   }



Als ich dann weitergemacht habe kam das dabei heraus:



Code:
 #include <stdio.h>

   #include <stdlib.h>

   #include <iostream.h>

   #include <string.h>

    

   void main(void)

   {

    

   			FILE *datei;

   			char bezeichnung[9];	//9 ist die Anzahl der Ziffern (- 1 wegen beginn ab 0) der Bezeichnung

   			strcpy(bezeichnung,"GameTitle=");

   			char fensterueberschrift[40], temp[4000];

   			int anz, a;

    

   			if((datei = fopen("HM_MP.ini","r")) == NULL)

   			{

   					    cout << "Fehler beim Oeffnen der Datei: RPG_RT.ini";

   					    exit(1);

   			}

    

   			anz = fread(temp,sizeof(char),4000,datei);

   			temp[anz]=NULL;

   			cout << temp;

    

   			for(a=0; a=anz-9; a++)

   			{

   					    if(temp[a]==bezeichnung[0] &&

   					       temp[a+1]==bezeichnung[1] &&

   					       temp[a+2]==bezeichnung[2] &&

   					       temp[a+3]==bezeichnung[3] &&

   					       temp[a+4]==bezeichnung[4] &&

   					       temp[a+5]==bezeichnung[5] &&

   					       temp[a+6]==bezeichnung[6] &&

   					       temp[a+7]==bezeichnung[7] &&

   					       temp[a+8]==bezeichnung[8] &&

   					       temp[a+9]==bezeichnung[9])

   					    {

   								   break;

   					    }					  

   			}

   			a=a+9;

   			cout << a;

   			fclose(datei);

   }







Ich habe also nur das hier dazugefügt:



Code:
 			for(a=0; a=anz-9; a++)

   			{

   					    if(temp[a]==bezeichnung[0] &&

   					       temp[a+1]==bezeichnung[1] &&

   					       temp[a+2]==bezeichnung[2] &&

   					       temp[a+3]==bezeichnung[3] &&

   					       temp[a+4]==bezeichnung[4] &&

   					       temp[a+5]==bezeichnung[5] &&

   					       temp[a+6]==bezeichnung[6] &&

   					       temp[a+7]==bezeichnung[7] &&

   					       temp[a+8]==bezeichnung[8] &&

   					       temp[a+9]==bezeichnung[9])

   					    {

   								   break;

   					    }					  

   			}

   			a=a+9;





doch plötzlich zeigt mir das Programm keinen Text mehr an, vorher aber wurde mir der Inhalt der ini Datei angezeigt, hat jemand eine Ahnung warum?



Falts sich jemand fragt was das Programm bringt, noch bringt es nichts, da es noch nicht fertig ist.
 
Zurück