Problem mit GetPrivateProfileString
-
Ich will etwas mit GetPrivateProfileString aus einer ini auslesen. Das Programm wird zwar ohne Fehler kompiliert aber das auslesen klapt nicht.
Hier der Code:CHAR inBuf[80]; GetPrivateProfileString("PC Config", "Temp", LabeledEdit4->Text.c_str(), inBuf, 80, "CloneBox.ini");
-
Hallo
Suche im Forum oder der BCB-Hilfe mal nach TIniFile.
bis bald
akari
-
Habe ich schon. Das hat mir aber auch nicht weitergeholfen.
-
Hallo
also in der BCB-Hilfe zu TIniFile ist unter dem Link TIniFile verwenden oben in der Titelleiste ist ein Beispiel, das doch alles erklärt.
bis bald
akari
-
Ich glaube du mienst das hier:
TIniFile *ini; ini = new TIniFile( ChangeFileExt( Application->ExeName, ".INI" ) ); Top = ini->ReadInteger( "Form", "Top", 100 ); Left = ini->ReadInteger( "Form", "Left", 100 ); Caption = ini->ReadString( "Form", "Caption", "Default Caption" ); ini->ReadBool( "Form", "InitMax", false ) ? WindowState = wsMaximized : WindowState = wsNormal; delete ini;Habs so verändert:
TIniFile *ini; ini = new TIniFile( ChangeFileExt( LabeledEdit4->Text, "CloneBox.ini" ) ); Text = ini->ReadString( "PC Config", "Temp", "" ); ini->ReadBool( "LabeledEdit4->Text", "InitMax", false ) ? WindowState = wsMaximized : WindowState = wsNormal; delete ini;Nur das Problem ist das es nicht im Edit Feld angezeigt wird.
-
Was soll denn eigentlich angezeigt werden? Und vielleicht solltest du "es" dem Edit ja auch noch irgendwo zuweisen. Überleg nochmal, wie du das sonst immer machst.
Und beim ReadBool hat sich in dem Beispiel in der Hilfe ein Fehler eingeschlichen: du musst dort ebenfalls den Rückgabewert auslesen (falls du Wert darauf legst :)).
-
Hallo
wahrscheinlich suchst du ini->ReadString(), um ein AnsiString. Schau dir mal das Beispiel in der Hilfe zu der Methode an.
bis bald
akari
-
Hab gerade gemerkt das es da unten noch weitergeht
.Soweit funktioniert das jetzt. Da ist nur noch ein kleiner Fehler. Beim 2. Klick ist das Feld wieder leer und beim 3. steht der Text wieder da und soweiter.
TIniFile *ini; ini = new TIniFile( ChangeFileExt( LabeledEdit4->Text, "CloneBox.ini" ) ); LabeledEdit4->Text = ini->ReadString( "PC Config", "Temp", ""); delete ini;Ich weiss das kommt weil zwischen den "" nichts steht. Aber löschen kann ich die auch nicht
.Oh! Wollte es eigendlich nur editieren.
-
Hallo
mir kommt verdächtig vor, das du zuerst aus
LabeledEdit4->Textden Namen der Datei liest und dann denn Wert reinschreibst.
Kann es sein, das dann einfach der Name der Datei fehlt?bis bald
akari
-
Also wenn du das LabledEdit ganz oben meinst das kann nicht ganz richtig sein. Ich weiss aber auch nicht was da hinkommt
.Ich habe das jetzt so gemacht:
TIniFile *ini; ini = new TIniFile( ChangeFileExt( LabeledEdit4->Text, "CloneBox.ini" ) ); ini->ReadString("PC Config", "Temp", LabeledEdit4->Text); LabeledEdit5->Text = ini->ReadString( "PC Config", "Image", ""); LabeledEdit1->Text = ini->ReadString( "XBOX Config", "IP", ""); LabeledEdit2->Text = ini->ReadString( "XBOX Config", "Benutzername", ""); LabeledEdit3->Text = ini->ReadString( "XBOX Config", "Passwort", ""); delete ini;Das funktioniert auch wunderbar nur das "Temp" nicht mehr geladen wird.
-
Hallo
Ja WO soll denn der Temp-Wert auch hingeladen werden?
??? = ini->ReadString("PC Config", "Temp", LabeledEdit4->Text);/Edit : Gib deinen Controls lieber mal eindeutige und sinnvolle Namen
bis bald
akari
-
Vielen Dank! Jetzt Funktionierts endlich so wie ich es wollte
.TIniFile *ini; ini = new TIniFile( ChangeFileExt( LabeledEdit4->Text, "CloneBox.ini" ) ); LabeledEdit4->Text = ini->ReadString("PC Config", "Temp", LabeledEdit4->Text); LabeledEdit5->Text = ini->ReadString( "PC Config", "Image", LabeledEdit5->Text); LabeledEdit1->Text = ini->ReadString( "XBOX Config", "IP", LabeledEdit1->Text); LabeledEdit2->Text = ini->ReadString( "XBOX Config", "Benutzername", LabeledEdit2->Text); LabeledEdit3->Text = ini->ReadString( "XBOX Config", "Passwort", LabeledEdit3->Text); delete ini;Es geht zwar wenn vor
"CloneBox.ini"das
LabledEdit4->Textsetze aber richtig ist es wohl nicht
. Und wie kriege ich es jetzt hin dass das ganze noch beim Programmstart geladen wird?
-
Hallo
Was steht denn in LabeledEdit4->Text drin? Da sollte ein Dateiname sein, eventuell mit Pfad. Und ChangeFilxExt erwartet als zweiten Parameter auch eigentlich eine reine Extension, keinen Dateinamen.
Für den Programmstart : Entweder in den Konstruktor kopieren oder in den Event OnShow
bis bald
akari
-
Da sollte ein Dateiname sein, eventuell mit Pfad
Und von welcher Datei? Der exe?
-
Hallo
natürlich der Dateiname der Ini-Datei, die du laden willst !
Wenn die Datei im selben Pfad wie das ausgeführte Programm steht, reicht "CloneBox.ini". Ansonsten eben noch den Pfad davor hängen.
Und wenn du einmal den festen kompletten Dateinamen hast, kannst du den auch ohne ChangeFileExt an TIniFile übergeben.so langsam frage ich, was und vor allem wie du programmierst.
bis bald
akari
-
Also die ini liegt im Windows Verzeichniss. Ich will da jetzt aber nicht C:\Windows eintragen. Selbst wenn man das verzeichniss nicht andres nennt ist es z.B. bei Win2000 C:\Windows NT und dann würde das nicht mehr laufen. Kann ich das nicht irgendwie einestellen das der automatisch das Windowsverzeichniss findet?
so langsam frage ich, was und vor allem wie du programmierst.
Bin halt noch totaler Anfänger
.
-
akari schrieb:
Wenn die Datei im selben Pfad wie das ausgeführte Programm steht, reicht "CloneBox.ini".
Um eventuellen Missverständnissen vorzubeugen: Standardmässig werden Ini-Dateien in %WINDOWS% erzeugt bzw. gesucht, wenn man sie im Programmverzeichnis (oder sonstwo) anlegen bzw. auslesen will dann muss explizit der Pfadname angeben werden.
Nachtrag:
ZeroOne schrieb:
Kann ich das nicht irgendwie einestellen das der automatisch das Windowsverzeichniss findet?
Das macht "der" automatisch, soweit nicht ausdrücklich anders festgelegt. S.o.
-
Also soweit ich das jetzt verstanden habe müsste das so aussehen:
ini = new TIniFile( ChangeFileExt( CloneBox.ini, ".INI" ) );Was nur leider nicht funktioniert.
-
"Funktioniert nicht" ist keine ausreichende Problembeschreibung.
Und, so leid es mir tut, du hast offensichtlich nichts verstanden.
Schreib deinen Code mal in einzelne Zeilen, anstatt alles gleich in den TIniFile-Konstruktor zu packen, und lass dir jeweils das Ergebnis anzeigen.
-
Hallo
Außerdem :
ChangeFileExt( CloneBox.ini, ".INI" )ist Unsinn.
warum nicht gleichini = new TIniFile("CloneBox.ini");bis bald
akari