AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IniFile - Auslesen funktioniert nicht

Ein Thema von Cyberbob · begonnen am 20. Aug 2006 · letzter Beitrag vom 21. Aug 2006
Antwort Antwort
Seite 2 von 2     12   
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#11

Re: IniFile - Auslesen funktioniert nicht

  Alt 20. Aug 2006, 10:29
Eigentlich sieht der Code wirklich fast sauber aus.
Zitat von Khabarakh:
Zitat von mkinzler:
dennoch gehört das Create nicht ins try...Warum nicht ?
Weil's keinen Sinn ergibt?
Überleg doch mal, was passiert, sollte eine Exception im ctor ausgelöst werden. Der Ini-Variablen wird kein Pointer zugewiesen, da der Code sofort ins Finally springt. Und da Delphi keinen lokalen Variablen initialisiert, knallt es höchstwahrscheinlich dann beim Aufruf von Free, weil IniDatei sonstwohin zeigen kann.
Also ändern wie folgt (im übrigen unveränderte Kopie):
Zitat von Cyberbob:
Mein Code:
Delphi-Quellcode:
IniDatei := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); // verschoben
try
  len := IniDatei.ReadInteger('Global', 'EQ', 0);
  ShowMessage(IntToStr(len));
finally
  IniDatei.Free;
end;
Was mach ich falsch, ich wüsste nicht, was ich anderst gemacht haben sollte als sonst...
Ich sehe auch keinen Fehler (und die anderen Autoren ebenfalls nicht wirklich) - natürlich unter der Voraussetzung, dass die Ini wirklich im Programmverzeichnis liegt.

In solchen Fällen bietet es sich immer an, schrittweise im Debugger vorzugehen - Haltepunkt auf TIniFile.Create - und die lokalen Variablen zu prüfen. Außerdem könntest Du zusätzlich eine Stringliste erzeugen, in die Du nacheinander alle Sections und alle Werte einträgst und mit ShowMessage anzeigen lässt - siehe das Beispiel zu Delphi-Referenz durchsuchenTIniFile.ReadSections.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#12

Re: IniFile - Auslesen funktioniert nicht

  Alt 20. Aug 2006, 17:54
Also, ich habe in meinem Code jetzt vollgendes stehen:

Delphi-Quellcode:
  IniDatei := TIniFile.Create('Settings.ini');
  try
    len := IniDatei.ReadInteger('Global', 'EQ', 0);
    ShowMessage(IntToStr(len));
  finally
    FreeandNil(IniDatei);
  end;
Die Datei Settings.ini existiert und wenn ich testweise ein Memo1.Ls.LoadFromFile('Settings.ini'); zeigt er mir den Inhalt auch an.
Dennoch kommt er zum ShowMessage und Zeigt mir 0 an! Eine Exception wird auch nicht ausgelöst, das Programm läuft weiter und der Compiler/Debugger meckert auch nicht

[EDIT] Hab jetzt mal nen Haltepunkt bei try gesetzt, Bei IniDatei Zeigt er mir jetzt "IniDatei = ()" an. Was bedeutet das, das nicht zugewiesen ist?
Dennoch bringt er keine Exception. [/EDIT]
Christian
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#13

Re: IniFile - Auslesen funktioniert nicht

  Alt 20. Aug 2006, 18:24
Versuchs mal mit
IniDatei := TIniFile.Create(ExtractFilePath(paramstr(0))+'Settings.ini'); INI-dateien werden normalerweise im Windows-Ordner gespeichert, also versucht

IniDatei := TIniFile.Create('Settings.ini'); z.B. C:\Windows\Settings.ini zu laden.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: IniFile - Auslesen funktioniert nicht

  Alt 20. Aug 2006, 18:29
Bevor wir jetzt noch tagelang weiter raten: füge bitte die folgende Prozedur in dein Programm ein und rufe sie dort auf, wo du den Wert aus der Ini-Datei laden möchtest. Teile uns dann bitte mit, was in der Messagebox steht, die beim Aufruf erscheint.

Delphi-Quellcode:
procedure CheckIni;
const
  SECTION = 'Global';
  KEY = 'EQ';
var
  Ini : TIniFile;
  FileName : string;
  Value : Integer;
begin
  FileName := ExtractFilePath(ParamStr(0)) + 'Settings.ini';
  if FileExists(FileName) then
    begin
      Ini := TIniFile.Create(FileName);
      try
        if Ini.SectionExists(SECTION) then
          if Ini.ValueExists(SECTION, KEY) then
            begin
              Value := Ini.ReadInteger(SECTION, KEY, 0);
              ShowMessage ('Der gelesene Wert: ' + IntToStr(Value));
            end
          else
            ShowMessage ('Der Schlüssel "' + KEY + '" existiert nicht!')
        else
          ShowMessage ('Der Abschnitt "' + SECTION + '" existiert nicht!');
      finally
        Ini.Free;
      end;
    end
  else
    ShowMessage ('Die Datei "' + FileName + '" existiert nicht!');
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#15

Re: IniFile - Auslesen funktioniert nicht

  Alt 20. Aug 2006, 18:41
@Thanatos81: Hat funktioniert danke! Jetzt zeigt er mir den Richtigen Wert an!


Dank an alle!


Was ist eigentlich der Unterschied zwischen IniDatei.Free und FreeandNil(IniDatei)?
Christian
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#16

Re: IniFile - Auslesen funktioniert nicht

  Alt 21. Aug 2006, 14:31
Der zweite Befehl ist besser, da dem Objekt auch noch zusätzlich nil zugewiesen wird, wie der Name der Funktion schon sagt.
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: IniFile - Auslesen funktioniert nicht

  Alt 21. Aug 2006, 16:35
... wobei, wenn es sich um eine lokale Variable handelt (ini) und danach nix mehr relevantes an Code kommt, was die INI betrifft, dann reicht ein .Free vollkommen.
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#18

Re: IniFile - Auslesen funktioniert nicht

  Alt 21. Aug 2006, 16:44
Dann schon, ich zB hab mir aber trotzdem angewöhnt auch in solchen Fällen FreeAndNil zu verwenden um es dann an anderen Stellen automatisch zu nutzen und nicht "aus Versehen" .Free zu verwenden.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: IniFile - Auslesen funktioniert nicht

  Alt 21. Aug 2006, 18:00
Zitat von Thanatos81:
Dann schon, ich zB hab mir aber trotzdem angewöhnt auch in solchen Fällen FreeAndNil zu verwenden um es dann an anderen Stellen automatisch zu nutzen und nicht "aus Versehen" .Free zu verwenden.
Hatte ich früher auch, bin aber nun wieder dazu über gegangen FreeAndNil() wirklich nur noch da zu verwenden, wo eine erneute Abfrage oder Verwendung der Variable in Frage kommt. So habe ich auch im Destructor keine FreeAndNil()'s drin...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz