Entwickler-Ecke

Dateizugriff - Fehler beim INI Lesen


Schakal - Mo 05.01.04 20:09
Titel: Fehler beim INI Lesen
kann mir ma wer sagen wo hier der fehler ist, ich seh nämlich keinen

also hier die inifile

Delphi-Quelltext
1:
2:
[EINSTELLUNGEN]
MAKER=C:\Spiele\RpgMaker2003\rpg2003\RPG2003.EXE


und hier der delphi code

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.laden(Sender: TObject);
var
  ini : TIniFile;
begin
  ini := TIniFile.Create('lister.ini');
  maker := Ini.ReadString('EINSTELLUNGEN''MAKER''Kein Pfad');
  Label1.Caption := maker;
end;


label1 zeigt aber immer "kein pfad" an


Delete - Mo 05.01.04 21:35

Wie soll dein Programm die Ini Datei finden, wenn du nir den Dateinamen angibst? Er sucht sie im aktuellen Verzeichnis, welches sich aber geändert haben kann durch einen Aufruf von TOpneDialog under TSaveDialog. Desweiteren lies mal was in der Hilfe steht, wenn du beim Anlegen keinen Pfand angibst, dann landet sie im Windows-Verzeichnis oder so.


Schakal - Mo 05.01.04 21:57

also die prozedur wird bei oncreate der form aufgerufen
und die lister.ini ist in dem selben verzeichnis wie mein programm
selbst wenn ich anstatt
ini := TIniFile.Create('lister.ini');
ini := TIniFile.Create('c:\test\lister.ini');
schreibe kommt trotzdem das selbe


ErnestoChe - Mo 05.01.04 22:20

Hi,

probiers mal so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  ini : TIniFile;
begin
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'lister.ini');
  try
    maker := Ini.ReadString('EINSTELLUNGEN''MAKER''Kein Pfad');
    Label1.Caption := maker;
  finally
    ini.Free;
  end;
end;


MFG

- Ernesto -


Delete - Mo 05.01.04 22:29

Was soll´n das "maker" bedeuten, @Ernesto. Wenn´s trotzdem schief geht, wird auch die zusätzliche Variable nichts helfen, weil sie mit "Kein Pfad" gefüllt wird. ;)


ErnestoChe - Mo 05.01.04 22:38

Hi,


maker wird wohl eine String-Variable sein, sonst könnte er nicht kompilieren, mal abgesehen davon, dass sie unnötig ist.

Zitat:
Wenn´s trotzdem schief geht, wird auch die zusätzliche Variable nichts helfen, weil sie mit "Kein Pfad" gefüllt wird.


Was meinst du? Welche zusätzliche Variable? Ich habe lediglich eine Ermittlung des Programmpfades mit ParamStr eingebaut, da ich denke, dass die Datei nicht gefunden wird. Das try..finally mit Freigabe hat damit nichts zu tun. Hab ich nur dazu geschrieben, weil man das so tun sollte mit lokalen Objekten.

MFG

- Ernesto -


Chatfix - Di 06.01.04 09:40

Hier ein Tutorial zu INIs vielleicht hilft dir des weiter:

http://www.kuknet.de/kuk-software/tuts/tut1.php


Delete - Di 06.01.04 10:18

ErnestoChe hat folgendes geschrieben:
maker wird wohl eine String-Variable sein, sonst könnte er nicht kompilieren, mal abgesehen davon, dass sie unnötig ist.

[...]

Entschuldigung, mein Fehler. :oops: Du hast natürlich Recht. Ich habe nicht gesehen, dass du den Quellcode von Schakal übernommen hast.


ErnestoChe - Di 06.01.04 12:52

Hi,

ach so. Kein Problem :wink: . Ich hab dich auch missverstanden. Ich dachte die Frage galt Schakal und nur der zweite Teil deines Postings galt mir. Habe den Punkt nach @Ernesto übersehen :oops: sorry.

MFG

- Ernesto -


JustusJonas - Mi 07.01.04 09:58

Ich mache das mit den INIs immer Folgendermaßen:

1. Type anlegen:

Delphi-Quelltext
1:
2:
3:
TINI = record    //Record für alle INI Werte
  Maker     : string;
  end;


2. Variable anlegen:

Delphi-Quelltext
1:
2:
var
  INI                : TINI;


3. Konstante anlegen:

Delphi-Quelltext
1:
2:
const
  cINIFile      = '.\lister.INI';  //Name des INI-Files angeben.


Und einlesen tu ich das ganze dann so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
DSNinifile := TINIFile.Create( cINIFile ); //Ini-Datei auslesen
  with INI do
    with DSNinifile do
      begin
        
        maker := ReadString( 'EINSTELLUNGEN''maker''' );
        if maker = ''
        then MessageDlg('INI-Read:Fehler in ' + cINIFile + '! Maker nicht angegeben!!', mtWarning, [mbOk], 0);
        
      end;
    DSNinifile.Free;
end;


Hoffe das hilft dir irgendwie weiter!?

Greetz


Delete - Mi 07.01.04 12:09

@JustusJonas: Warum weist du "maker" einen Leerstring zu? Wofür gibt´s denn den Default-Wert (= letzter Parameter bei ReadString). Es ist weniger umständlich, wenn du im Fall eines Fehlers (= Angabe existiert in der INI nicht) gleich den passenden Standardwert angibst.


Delete - Mi 07.01.04 16:27

Und das:

Delphi-Quelltext
1:
2:
const 
  cINIFile      = '.\lister.INI';  //Name des INI-Files angeben.

ist auch eine relative Pfadangabe, kann also auch wieder in die Hose gehen. :roll:


opfer.der.genauigkeit - Do 08.01.04 09:26

Hi Schakal,

Vielleicht kriegst du deshalb nur 'keinen Pfad' als Rückwert, weil in der angegebene Bereich in der INI- File nicht gefunden wurde.

Überprüf nochmal den Aufbau deiner INI- Datei.


Schakal - Do 08.01.04 15:23

ich konnte das problem lösen, es lag anscheinend daran das sich der pfad geändert hat und die ini deswegen nicht gefunden wurde.

http://www.delphi-forum.de/viewtopic.php?t=20442