Entwickler-Ecke
Dateizugriff - Werte aus der INI Datei werden nicht gelesen
rafi@work - Do 21.08.03 15:36
Titel: Werte aus der INI Datei werden nicht gelesen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TFormIvrHmpConfigTool.LoadFromIni1Click(Sender: TObject); var FileLevel : string; begin FGatewayIni := TIniFile.Create('bsGateway.ini'); FileLevel := FGatewayIni.ReadString('LOGGER','FILE_LEVEL',''); end; |
er liest den Wert nicht raus, was ist hier falsch?
Moderiert von
Tino: Titel geändert.
Delete - Do 21.08.03 15:49
Liegt diese INI-Datei denn im Windows-Verzeichnis? Ohne Pfadangabe wird das nämlich vorausgesetzt. Kannst du auch in der Hilfe nachlesen. Notfalls gib den Pfad mit an, dann sollte es gehen.
Allgemein: du könntest dich um einen besseren Stil bemühen. Evtl. brauchst du die Variable "FGatewayIni" ja an anderer Stelle noch mal, dann will ich nichts gesagt haben. Wenn nicht, dann solltest du das INI-Objekt nach dem Benutzen auch wieder freigeben. Kurz gesagt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ini := TIniFile.Create('...'); if(ini <> nil) then try finally ini.free; end; |
Aber auch das steht IMHO in der Hilfe.
Akut-Programming - Do 21.08.03 15:53
versuchs mal so, wenn die ini im selben ordner ist wie deine app:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| uses IniFiles;
...
procedure TFormIvrHmpConfigTool.LoadFromIni1Click(Sender: TObject); var FileLevel,pfad: string; FGatewayIni: TIniFile; begin pfad:=ExtractFilePath(ParamStr(0)); FGatewayIni:=TIniFile.Create(pfad+'bsGateway.ini'); FileLevel := FGatewayIni.ReadString('LOGGER','FILE_LEVEL',''); end; |
Moderiert von
Tino: Delphi-Tags hinzugefügt.
rafi@work - Do 21.08.03 15:53
Danke!
ich habe es jetzt so versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TFormIvrHmpConfigTool.LoadFromIni1Click(Sender: TObject); var GatewayIni : TIniFile; FileLevel : string; begin GatewayIni := TIniFile.Create('E:\work\projects\programming\delphi\IVR HMP Config Tool\bsGateway.ini'); FileLevel := GatewayIni.ReadString('LOGGER','FILE_LEVEL',''); GatewayIni.Free; end; |
doch leider sind alle variablen leer, was ist hier nicht richtig?
Moderiert von
Tino: Delphi-Tags hinzugefügt.
rafi@work - Do 21.08.03 15:59
@ Akut-Programming, bei deinem Beispiel sind di Variablen leider auch leer :(
Akut-Programming - Do 21.08.03 16:05
kann es sein, das du noch einen parameter vergessen hast, bei mir würde es so aussehen...
Delphi-Quelltext
1: 2:
| windowheight:=ini.ReadInteger('einstellungen','WindowHeight',0); |
ahhja... :autsch: Du machst des ja mit n string, da haste den 3 parameter nur leer gelassen
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Terra23 - Do 21.08.03 16:33
@Rafi: Ich würde vielleicht statt den direkten Pfad zu nutzen, einfach mal ParamStr(0) nehmen, denn dann liegt die INI wirklich in dem Verzeichnis, wo auch das Tool liegt.
Delete - Do 21.08.03 19:44
Nee, durch paramstr(0) gehst du nur in deinem Programm davon aus, dass die INI im selben Verzeichnis wie das Programm liegt. Tatsächlich kann sie aber an anderer Stelle sein. :wink:
MSCH - Do 21.08.03 20:00
| MathiasSimmack hat folgendes geschrieben: |
| Nee, durch paramstr(0) gehst du nur in deinem Programm davon aus, dass die INI im selben Verzeichnis wie das Programm liegt. Tatsächlich kann sie aber an anderer Stelle sein. :wink: |
na wo soll sie denn sonst liegen? übrigens mit
Delphi-Quelltext
1: 2:
| pfad:=ExtractFilePath(ParamStr(0)); FGatewayIni:=TIniFile.Create(pfad+'bsGateway.ini'); |
wirds net funzen, da hier der Backslash vergessen wurde. Das ergibt dann grütze.
richtiger:
Delphi-Quelltext
1: 2:
| pfad:=IncludeTrailingBackSlash(ExtractFilePath(ParamStr(0))); FGatewayIni:=TIniFile.Create(pfad+'bsGateway.ini'); |
Es ist übrigens usus, die zum Programm gehörigen files auch dort zu lagern, wo die Applikation liegt.
grez
msch
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Terra23 - Do 21.08.03 20:10
@Mathias: Ich habe mich wohl einfach ein wenig verkehrt ausgedrückt. Wenn die Datei nicht existiert, wird ja eh auf den Default-Wert zurückgegriffen und ich gehe mal fest davon aus, er wird die INI auch später speichern wollen und wenn er das mit ParamStr() macht, ist es für IMHO einfacher, denn wenn er einen direkten Pfad eingibt (so wie er es tun will), kann's Probleme geben. Wer weiß, vielleicht ist E:\ bei jemandem ein CD-Laufwerk. :-)
Das war's, was ich gemeint habe..
Delete - Do 21.08.03 21:27
Terra hat´s kapiert:
| MSCH hat folgendes geschrieben: |
| MathiasSimmack hat folgendes geschrieben: | | Nee, durch paramstr(0) gehst du nur in deinem Programm davon aus, dass die INI im selben Verzeichnis wie das Programm liegt. Tatsächlich kann sie aber an anderer Stelle sein. :wink: |
na wo soll sie denn sonst liegen ? |
Wenn du in deinem Programm "ExtractFilePath(paramstr(0))" als Ausgangsverzeichnis benutzt, um die INI zu öffnen (s. ReadString im Beispielcode dieses Threads), wird sie nicht wie von Zauberhand auch automatisch in dem Verzeichnis der Exe auftauchen. Es obliegt
deiner Verantwortung, die INI dort abzulegen. Ob nun manuell oder im Programm. Darauf wollte ich hinaus. Bitte erst nachdenken, dann kritisieren. :)
Und Ja, Terra, du hast ja recht. Man gibt nach Möglichkeit keine festen Pfade in einem Programm an, das man evtl. später veröffentlichen möchte. Man benutzt entweder "paramstr(0)" oder -wie in Luckies Fall mit seinem LuckieDIPS- irgendeinen Benutzerordner, um Konfig- und ähnliche Daten zu speichern. Ich gebe dir also unbesehen recht. Ich fand nur deine Formulierung amüsant.
Gruß.
rafi@work - Fr 22.08.03 08:49
danke allen für eure hilfe!!! so hats prima funtioniert
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TFormIvrHmpConfigTool.LoadFromIni1Click(Sender: TObject); var FileLevel,pfad: string; GatewayIni: TIniFile; begin pfad:=ExtractFilePath(ParamStr(0)); GatewayIni:=TIniFile.Create(pfad+'bsGateway.ini'); FileLevel := GatewayIni.ReadString('LOGGER','FILE_LEVEL',''); GatewayIni.Free;
If (FileLevel = 'T') then begin ComboBoxFile.Text := 'ON'; end; if (FileLevel = 'I') then begin ComboBoxFile.Text := 'OFF'; end; |
gruss
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!