Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Ini Datei wird nicht erstellt... (https://www.delphipraxis.net/179212-ini-datei-wird-nicht-erstellt.html)

Sir Rufo 21. Feb 2014 12:50

AW: Ini Datei wird nicht erstellt...
 
Das Wichtigste hier ist doch, dass der Name/Pfad zur Ini-Datei anscheinend nicht immer derselbe ist.
Das kann passieren, wenn der Pfad in jeder Routine immer wieder von Hand erstellt wird.

Darum sollte zuerst einmal dieser Pfad über eine Funktion bereitgestellt werden. Ist der dann falsch, dann ist die Funktion falsch, aber der Rest bleibt gleich.

Delphi-Quellcode:
function GetMyIniFilename : string;
begin
  Result := ...
end;
Überall, wo jetzt mit dem Ini-File gearbeitet werden soll einfach:
Delphi-Quellcode:
LIni := TIniFile.Create( GetMyIniFilename );
try
  // mit dem Ini-File arbeiten
finally
  LIni.Free;
end;
Die angebotenen Lösungen sind bestimmt nicht falsch, aber es geht ja erst mal um das Verständnis, wie etwas gelöst werden kann (gesichert immer der gleiche Dateiname).

p80286 21. Feb 2014 12:54

AW: Ini Datei wird nicht erstellt...
 
Zitat:

Zitat von Codix32 (Beitrag 1248888)
Dann:

Delphi-Quellcode:
filename := extractfilepath(paramstr(0))+IniName + '.ini';
Label5.Caption:= filename;
Da wird dann der komplette Pfad angezeigt:
c:\users\XXXX\Dokuments\Borland Studio-Projekte\My_proggis\Raten-mit-IniFile\MyKreditInif.ini

Die Funktion 'GetSpecialFolder' habe ich mal so getestet:

Delphi-Quellcode:
 MessageDlg (GetSpecialFolder (CSIDL_APPDATA), mtInformation, [mbOK], 0);
Da kriege ich den Pfad: C:\users\XXXX\Favorites

Und in der LeseIni:
Delphi-Quellcode:
procedure TForm1.leseIni(IniName:string);
var
  ini:TIniFile;
  filename: String;
begin
filename:=GetSpecialFolder(CSIDL_APPDATA)+'\'+Ininame+ '.ini';
Label5.Caption:=filename;
ini := TIniFile.Create(filename);
...
kriege ich den Pfad: C:\Users\XXXX\AppData\Roaming\MyKreditInif.ini
Aber die Variablen bleiben leer, es wird nichts eingelesen.
Also was mache ich da noch falsch?

Leider ist es mir beim ersten Mal nicht aufgefallen, Du solltest statt GetSpecialFolder
SHGetFolder oder einen seiner engen Verwandten nutzen, dann solltest Du auch vernünftige Ergebnisse bekommen.

Gruß
K-H

Codix32 21. Feb 2014 16:26

AW: Ini Datei wird nicht erstellt...
 
Sir Rufo,

das Lesen der Ini geht, wenn ich den Code direkt in die OnClick Ereignis Prozedur des Buttons schreibe.
Es könnte also wohl an dem String Parameter der 'leseIni(IniName:string)' liegen.

Das hier geht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var
   ini:TIniFile;
   filename: String;
   ininame:String;
begin
   ininame:='MyKredInif';
   filename := extractfilepath(paramstr(0))+IniName+ '.ini';//'MyKredInif.ini';
   //filename:=GetSpecialFolder(CSIDL_APPDATA)+'\'+Ininame+ '.ini';
   Label1.Caption:=filename;
   ini := TIniFile.Create(filename);
 try
   Form1.Caption:=ini.ReadString('Sektion1', 'Name','');
   Gesamtkreditsum:=ini.ReadString('Sektion2', 'Gesamtkreditsumme',' ');
   Ratenhöhe:=ini.ReadString('Sektion2', 'Ratenhoehe', '');
   Ratenanzhl:=ini.ReadString('Sektion2', 'Ratenanzahl', '');
   Restsum:=ini.ReadString('Sektion3', 'Restsumme', '');
   Sonderrat:=ini.ReadString('Sektion3', 'Sonderrate','');
 finally
   ini.Free;
  // Variable ini wieder freigeben
end;
//  leseIni('MyKreditInif');
   Label2.Caption:=Gesamtkreditsum;
end;
Das hier geht nicht:
Delphi-Quellcode:
Type
  TForm1 = class(TForm)
...
  public
    { Public-Deklarationen }
     procedure leseIni(IniName:string);
  end;

....
....

procedure TForm1.leseIni(IniName:string);
var
  ini:TIniFile;
  filename: String;
begin
 filename := extractfilepath(paramstr(0))+IniName+ '.ini';
 //filename:=GetSpecialFolder(CSIDL_APPDATA)+'\'+Ininame+ '.ini';
 Label1.Caption:=filename;
 ini := TIniFile.Create(filename);
 try
   Form1.Caption:=ini.ReadString('Sektion1', 'Name','');
   Gesamtkreditsum:=ini.ReadString('Sektion2', 'Gesamtkreditsumme',' ');
   Ratenhöhe:=ini.ReadString('Sektion2', 'Ratenhoehe', '');
   Ratenanzhl:=ini.ReadString('Sektion2', 'Ratenanzahl', '');
   Restsum:=ini.ReadString('Sektion3', 'Restsumme', '');
   Sonderrat:=ini.ReadString('Sektion3', 'Sonderrate','');
 finally
   ini.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject)
begin
...
   leseIni('MyKreditInif');
   Label2.Caption:=Gesamtkreditsum;
end;
Merkwürdiges Verhalten. Übrigens funktioniert die 'LeseIni(ininame:string)' auch auf Windows XP nicht.

Bjoerk 21. Feb 2014 16:39

AW: Ini Datei wird nicht erstellt...
 
Wie oft hast du denn Form1?

Dalai 21. Feb 2014 16:40

AW: Ini Datei wird nicht erstellt...
 
Code:
ininame:='MyKredInif';
Code:
leseIni('MyKreditInif');
Fällt dir was auf?

Tip: Mit Konstanten wär das nicht passiert.

MfG Dalai

Codix32 21. Feb 2014 16:53

AW: Ini Datei wird nicht erstellt...
 
Zitat:

Zitat von Dalai (Beitrag 1249023)
Code:
ininame:='MyKredInif';
Code:
leseIni('MyKreditInif');
Fällt dir was auf?

Tip: Mit Konstanten wär das nicht passiert.

MfG Dalai

:oops::oops::oops::pale: Ok, das ist so ungefähr der peinlichste Fehler, der mir je passiert ist. Ich habe den Dateinamen falsch geschrieben.

Aber ein Trost dabei ist, dass ich was über UAC gelernt.

bcvs 21. Feb 2014 17:29

AW: Ini Datei wird nicht erstellt...
 
Das war ja auch schon meine Vermutung in #28

Sir Rufo 21. Feb 2014 18:09

AW: Ini Datei wird nicht erstellt...
 
Zitat:

Zitat von bcvs (Beitrag 1249027)
Das war ja auch schon meine Vermutung in #28

Darum ja auch eine Funktion, die den Namen bereitstellt ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Seite 5 von 5   « Erste     345   

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