Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Codix32 20. Feb 2014 14:22

Delphi-Version: 5

Ini Datei wird nicht erstellt...
 
Hallo,

versuche gerade probeweise eine Ini - Datei zu erstellen, aber die Datei wird nicht erstellt, sie ist nirgends zu finden:

Delphi-Quellcode:
uses
 ,... IniFiles;
//...

  public
    { Public-Deklarationen }
    procedure erzeugeIni(IniName:string);
  end;

....

procedure TForm1.erzeugeIni(IniName:string);
var
  ini:TIniFile;
begin
ini := TIniFile.Create(IniName);
// INI-Datei erstellen (falls nicht vorhanden) und initialisieren
try
ini.WriteString('Sektion1', 'Eigenschaft1', 'Dein String');
// String in Sektion1 unter Eigenschaft1 abspeichern
ini.WriteInteger('Sektion2', 'Eigenschaft1', 1234);
// Integerwert in Sektion2 unter Eigenschaft1 abspeichern
ini.WriteBool('Sektion2', 'Eigenschaft2', True);
// Wert vom Typ Boolean abspeichern
finally
ini.Free;
// Variable ini wieder freigeben
end;
end;

.....

procedure TForm1.Button1Click(Sender: TObject);
begin
    erzeugeIni('MyKredinif');
end;
Ist da noch ein Fehler drin, den ich nicht sehe?

DeddyH 20. Feb 2014 14:24

AW: Ini Datei wird nicht erstellt...
 
Keine relativen Pfadangabe verwenden, Du weißt nie mit Sicherheit, was aktuell das Arbeitsverzeichnis ist.

Codix32 20. Feb 2014 14:29

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

Zitat von DeddyH (Beitrag 1248798)
Keine relativen Pfadangabe verwenden, Du weißt nie mit Sicherheit, was aktuell das Arbeitsverzeichnis ist.

Danke DeddyH,
aber auch über die Suchen Funktion läßt sich nirgends auf der Festplatte die Ini finden.

DeddyH 20. Feb 2014 14:31

AW: Ini Datei wird nicht erstellt...
 
Wonach hast Du denn gesucht? Eine "MyKredinif" ohne Endung müsste sich eigentlich finden lassen.

himitsu 20. Feb 2014 14:32

AW: Ini Datei wird nicht erstellt...
 
MSDN-Library durchsuchenWritePrivateProfileString

Wobei INIs nicht "nur" im Arbeitsverzeichnis landen, wenn man keine Pfad angibt ... siehe Remarks

Codix32 20. Feb 2014 14:34

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

Zitat von DeddyH (Beitrag 1248803)
Wonach hast Du denn gesucht? Eine "MyKredinif" ohne Endung müsste sich eigentlich finden lassen.

erzeugeIni('MyKredinif.ini'); geht auch nicht und wenn ich nach MyKreditinif auf C: suche, wird die 'Unit1' gefunden

Delphi-Quellcode:
procedure TForm1.erzeugeIni(IniName:string);
var
   ini:TIniFile;
begin
 ini := TIniFile.Create(IniName+'.ini');  //<- geändert
// INI-Datei erstellen (falls nicht vorhanden) und initialisieren
try

DeddyH 20. Feb 2014 14:38

AW: Ini Datei wird nicht erstellt...
 
Dann gib doch einen absoluten Pfad an.

Codix32 20. Feb 2014 14:43

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

Zitat von DeddyH (Beitrag 1248807)
Dann gib doch einen absoluten Pfad an.

Meinst Du das?
Delphi-Quellcode:
procedure TForm1.erzeugeIni(IniName:string);
var
    ini:TIniFile;
begin
  ini := TIniFile.Create(extractfilepath(paramstr(0))+IniName+'.ini'); //<- geändert
// INI-Datei erstellen (falls nicht vorhanden) und initialisieren
try
Ich glaube ich bin heut völlig daneben

Codix32 20. Feb 2014 14:47

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

Delphi-Quellcode:
ini := TIniFile.Create(extractfilepath(paramstr(0))+IniName+'.ini');
damit geht es, danke euch.:oops:

Popov 20. Feb 2014 15:01

AW: Ini Datei wird nicht erstellt...
 
@Codix32

Früher landeten Inis ohne Pfadangabe im Windows-Verzeichnis. Der ist aber heute schreibgeschützt, womit es eigentlich eine Fehlermeldung geben müsste (vorausgesetzt das ich nicht abgeschaltet). Gibt es keine Meldung, sollte irgendwo eine Datei erstellt worden sein.

Sir Rufo 20. Feb 2014 15:06

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

Zitat von Popov (Beitrag 1248814)
@Codix32

Früher landeten Inis ohne Pfadangabe im Windows-Verzeichnis. Der ist aber heute schreibgeschützt, womit es eigentlich eine Fehlermeldung geben müsste (vorausgesetzt das ich nicht abgeschaltet). Gibt es keine Meldung, sollte irgendwo eine Datei erstellt worden sein.

Bei der Delphiversion müsste die unter Windows 7 im VirtualStore gelandet sein :)

Codix32 20. Feb 2014 15:09

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

Zitat von Sir Rufo (Beitrag 1248815)
Zitat:

Zitat von Popov (Beitrag 1248814)
@Codix32

Früher landeten Inis ohne Pfadangabe im Windows-Verzeichnis. Der ist aber heute schreibgeschützt, womit es eigentlich eine Fehlermeldung geben müsste (vorausgesetzt das ich nicht abgeschaltet). Gibt es keine Meldung, sollte irgendwo eine Datei erstellt worden sein.

Bei der Delphiversion müsste die unter Windows 7 im VirtualStore gelandet sein :)

Stellt sich dem Greenhorn die Frage: "Was ist ein 'VirtualStore'?"

himitsu 20. Feb 2014 15:15

AW: Ini Datei wird nicht erstellt...
 
Eine Umleitung für "schrottige" Programme, welche vom UAC (glaub ich) eingerichtet wird, wenn es erkennt/denkt, daß das Programm schrott inkompatibel ist.

Such mal nach dem Verzeichis irgendwo in den Benutzer-Verzeichnissen.
[edit] Bei Google suchenVirtualStore -> z.B. http://blog.m-ri.de/index.php/2007/0...chattenseiten/

baumina 20. Feb 2014 15:18

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

Zitat von himitsu (Beitrag 1248817)
Eine Umleitung für "schrottige" Programme, welche vom UAC (glaub ich) eingerichtet wird, wenn es erkennt/denkt, daß das Programm schrott inkompatibel ist.

Such mal nach dem Verzeichis irgendwo in den Benutzer-Verzeichnissen.
[edit] Bei Google suchenVirtualStore -> z.B. http://blog.m-ri.de/index.php/2007/0...chattenseiten/

Ui, was sich da so alles an Verzeichnissen findet :cyclops:

C:\Users\baumina\AppData\Local\VirtualStore\Progra m Files\Embarcadero\RAD Studio\8.0

Codix32 20. Feb 2014 16:30

AW: Ini Datei wird nicht erstellt...
 
Ok, aber jetzt habe ich schon wieder ein Problem mit dem Lesen der IniFile:

Delphi-Quellcode:
procedure TForm1.leseIni(IniName:string);
var
  ini:TIniFile;
  filename: String;

begin
filename := extractfilepath(paramstr(0))+IniName + '.ini';
Label5.Caption:=filename;    //zeigt den Pfad und Dateinamen einwandfrei an
ini := TIniFile.Create(filename);
// INI-Datei erstellen (falls nicht vorhanden) und initialisieren
 try
  Form1.Caption:=ini.ReadString('Sektion1', 'Name', Name);
  //globale Variablen
  Gesamtkreditsum:=ini.ReadString('Sektion2', 'Gesamtkreditsumme',Gesamtkreditsum);
  Ratenhöhe:=ini.ReadString('Sektion2', 'Ratenhoehe', Ratenhöhe);
  Ratenanzhl:=ini.ReadString('Sektion2', 'Ratenanzahl', Ratenanzhl);
  Restsum:=ini.ReadString('Sektion3', 'Restsumme', Restsum);
  Sonderrat:=ini.ReadString('Sektion3', 'Sonderrate', Sonderrat);
  //
 finally
  ini.Free;
// Variable ini wieder freigeben
end;
end;

.......

procedure TForm1.Button2Click(Sender: TObject);
begin
  leseIni('MyKreditInif');
  Gesamtkreditsumme.Caption:= 'Gesamtkreditsumme '+  gesamtkreditsum;
  Ratenhoehe.Caption:='Ratenhoehe '+ Ratenhöhe;
  Ratenanzahl.Caption:='Ratenanzahl '+Ratenanzhl;
  Restsumme.Caption:='Restsumme '+Restsum;
  Sonderrate.Caption:='Sonderrate '+Sonderrat;
end;
Die Labels zeigen nichts an, obwohl die Mykreditinif.ini korrekt erstellt im aktuellen Verzeichnis liegt. Hiiiiilfe

p80286 20. Feb 2014 16:53

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

Zitat von Codix32 (Beitrag 1248829)
Ok, aber jetzt habe ich schon wieder ein Problem mit dem Lesen der IniFile:

Delphi-Quellcode:
procedure TForm1.leseIni(IniName:string);
var
  ini:TIniFile;
  filename: String;

begin
filename := extractfilepath(paramstr(0))+IniName + '.ini';
Label5.Caption:=filename;    //zeigt den Pfad und Dateinamen einwandfrei an
ini := TIniFile.Create(filename);
// INI-Datei erstellen (falls nicht vorhanden) und initialisieren
 try
  Form1.Caption:=ini.ReadString('Sektion1', 'Name', Name);
  //globale Variablen
  Gesamtkreditsum:=ini.ReadString('Sektion2', 'Gesamtkreditsumme',Gesamtkreditsum);
  Ratenhöhe:=ini.ReadString('Sektion2', 'Ratenhoehe', Ratenhöhe);
  Ratenanzhl:=ini.ReadString('Sektion2', 'Ratenanzahl', Ratenanzhl);
  Restsum:=ini.ReadString('Sektion3', 'Restsumme', Restsum);
  Sonderrat:=ini.ReadString('Sektion3', 'Sonderrate', Sonderrat);
  //
 finally
  ini.Free;
// Variable ini wieder freigeben
end;
end;

.......

procedure TForm1.Button2Click(Sender: TObject);
begin
  leseIni('MyKreditInif');
  Gesamtkreditsumme.Caption:= 'Gesamtkreditsumme '+  gesamtkreditsum;
  Ratenhoehe.Caption:='Ratenhoehe '+ Ratenhöhe;
  Ratenanzahl.Caption:='Ratenanzahl '+Ratenanzhl;
  Restsumme.Caption:='Restsumme '+Restsum;
  Sonderrate.Caption:='Sonderrate '+Sonderrat;
end;
Die Labels zeigen nichts an, obwohl die Mykreditinif.ini korrekt erstellt im aktuellen Verzeichnis liegt. Hiiiiilfe

Also
  • die INI-Datei ist vorhanden!
  • in der Ini-Datei befinden sich die gesuchten Daten an der richtigen Stelle?
  • was für einen Inhalt hat "RatenHöhe" oder "RatenAnzhl" sobald das Lesen abgeschlossen ist?
  • was sagt der Debugger dazu?

Gruß
K-H

P.S.
Du mußt nicht so laut um Hilfe rufen.

EWeiss 20. Feb 2014 16:58

AW: Ini Datei wird nicht erstellt...
 
Warum wird die INI nicht im richtigen Pfad angelegt?
In dem auch schreib und generelle Zugriffsrechte vorhanden sind?

Das ist sicherlich nicht Paramstr(0).
Siehe CSIDL_APPDATA

Zitat:

P.S.
Du mußt nicht so laut um Hilfe rufen.
Ah jo wäre bei Laut eher HILFE anstelle von Hiiilfe.

gruss

Codix32 20. Feb 2014 17:03

AW: Ini Datei wird nicht erstellt...
 
Die Ini Datei liegt im selben Ordner wie die dpr, pas, ectra.

[QUOTE]Ja, die Inifile ist vorhanden die Werte sind korrekt drin, die Variablen enthalten nichts, es wird also nichts eingelesen.
Sie enthält die mit WriteInteger geschriebenen Werte:

Zitat:

[Sektion1]
Name=Zähne
[Sektion2]
Gesamtkreditsumme=11000.00
Ratenhoehe=123,45
Ratenanzahl=60
[Sektion3]
Restsumme= .
Sonderrate= .

Codix32 20. Feb 2014 17:18

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

Zitat von EWeiss (Beitrag 1248834)
Warum wird die INI nicht im richtigen Pfad angelegt?
In dem auch schreib und generelle Zugriffsrechte vorhanden sind?

Das ist sicherlich nicht Paramstr(0).
Siehe CSIDL_APPDATA

Zitat:

P.S.
Du mußt nicht so laut um Hilfe rufen.
Ah jo wäre bei Laut eher HILFE anstelle von Hiiilfe.

gruss

Hm, also der Schreibzugriff hat ja funktioniert, aber das Auslesen geht nicht

Das hier geht:
Delphi-Quellcode:
procedure TForm1.erzeugeIni(IniName:string);
var
  ini:TIniFile;
begin
ini := TIniFile.Create(extractfilepath(paramstr(0))+IniName + '.ini');
// INI-Datei erstellen (falls nicht vorhanden) und initialisieren
 try
  ini.WriteString('Sektion1', 'Name', form2.Edit1.text);
  // String in Sektion1 unter Eigenschaft1 abspeichern
  ini.WriteString('Sektion2', 'Gesamtkreditsumme', Gesamtkreditsum);
  ini.WriteString('Sektion2', 'Ratenhoehe', Ratenhöhe);
  ini.WriteString('Sektion2', 'Ratenanzahl', Ratenanzhl);
  ini.WriteString('Sektion3', 'Restsumme', Restsum);
  ini.WriteString('Sektion3', 'Sonderrate', Sonderrat);
 finally
ini.Free;
// Variable ini wieder freigeben
end;
end;
Die Ini Datei wird angelegt, mit den Werten, aber das Auslesen geht nicht:
Delphi-Quellcode:
procedure TForm1.leseIni(IniName:string);
var
  ini:TIniFile;
  filename: String;

begin
filename := extractfilepath(paramstr(0))+IniName + '.ini';
Label5.Caption:=filename;
ini := TIniFile.Create(filename);
// INI-Datei erstellen (falls nicht vorhanden) und initialisieren
 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;
end;
und was nun bedeutet 'CSIDL_APPDATA'

EWeiss 20. Feb 2014 17:20

AW: Ini Datei wird nicht erstellt...
 
UAC eingeschaltet?
Mach mal aus und teste noch mal dann verstehst du vielleicht was ich meine ;)

gruss

Sir Rufo 20. Feb 2014 17:21

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

und was nun bedeutet 'CSIDL_APPDATA'
Frag doch mal Tante google ... :roll:

Codix32 20. Feb 2014 17:26

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

Zitat von EWeiss (Beitrag 1248842)
UAC eingeschaltet?
Mach mal aus und teste noch mal dann verstehst du vielleicht was ich meine ;)

gruss

Was meinst Du damit?

EWeiss 20. Feb 2014 17:28

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

Zitat von Codix32 (Beitrag 1248845)
Zitat:

Zitat von EWeiss (Beitrag 1248842)
UAC eingeschaltet?
Mach mal aus und teste noch mal dann verstehst du vielleicht was ich meine ;)

gruss

Was meinst Du damit?

Sorry wenn du das nicht weist kann ich dir nicht helfen das sind grundlegende Computer Kenntnisse.
Na Ok.. Hier

Dateien mit schreib und lese zugriffe sollten in einem Ordner abgelegt werden
Wo die Zugriffsrechte auch vorhanden sind.

Zitat:

Hm, also der Schreibzugriff hat ja funktioniert, aber das Auslesen geht nicht
Nur weil es Mal funktioniert hat muss es noch lange nicht richtig sein ;)


gruss

jaenicke 20. Feb 2014 17:55

AW: Ini Datei wird nicht erstellt...
 
Hier habe ich zu den Schreibrechten auf den eigenen Ordner mal einen kleinen Artikel geschrieben:
http://www.entwickler-ecke.de/viewtopic.php?p=548600

Codix32 20. Feb 2014 20:55

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

Zitat von jaenicke (Beitrag 1248853)
Hier habe ich zu den Schreibrechten auf den eigenen Ordner mal einen kleinen Artikel geschrieben:
http://www.entwickler-ecke.de/viewtopic.php?p=548600

Danke jaenicke,

die UAC habe ich ganz runtergefahren. Da gibt's nichts zu bestätigen.

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?

Popov 21. Feb 2014 00:32

AW: Ini Datei wird nicht erstellt...
 
Ist zwar schon uralt und ich nutze inzwischen neuere Versionen, aber hier meine alten EasyIniAppExe, EasyIniAppDataExe und EasyRegAppExe. Zu gebrauchen für schnelles speichern. Nachteil, nichts für große Mengen und es gibt immer nur eine Ini pro Unit. Vorteil, man muss sich nicht um den Speicherort kümmern und allein durch den Tausch der Unit kann man entscheiden wo die Infos landen - in der Ini im Programmordner, in Appdata Ordner oder in der Registry.

Bjoerk 21. Feb 2014 05:54

AW: Ini Datei wird nicht erstellt...
 
Weil du (angeblich) nach Favorites schreibst und von Data\Roaming\ liest?
Verwende eventl. $001A (= CSIDL_APPDATA) satt der unterschiedlichen CSIDL Konstanten?

BTW, es gibt auch TIniFile.ReadFloat und in der SysUtils StrToFloat, StrToFloatDef, TryStrToFloat ect.

bcvs 21. Feb 2014 07:16

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

Zitat von EWeiss (Beitrag 1248834)
Warum wird die INI nicht im richtigen Pfad angelegt?
In dem auch schreib und generelle Zugriffsrechte vorhanden sind?

Das ist sicherlich nicht Paramstr(0).

In diesem Fall sind auf Paramstr(0) anscheinend doch ausreichen Rechte vorhanden, denn:

Zitat:

Zitat von Codix32 (Beitrag 1248836)
Die Ini Datei liegt im selben Ordner wie die dpr, pas, ectra.

Der Fehler muss also woanders liegen. Vergiss erstmal das CSIDL_APPDATA und UAC. Schau dir mal im Debugger an, was wo genau eingelesen wird.
Ist der Übergebene Dateiname bei erzeugeIni(IniName:string); und leseIni(IniName:string); identisch (Tipfehler?)

Wenn das Programm später mal unter C:\Programme... installiert werden soll, musst du natürlich unbedingt den Speicherort der Ini nach CSIDL_APPDATA legen.

EWeiss 21. Feb 2014 07:58

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

@bcvs In diesem Fall sind auf Paramstr(0) anscheinend doch ausreichen Rechte vorhanden, denn:
logisch!
Nur das war niemanden vorher bekannt.

Zitat:

@bcvs Vergiss erstmal das CSIDL_APPDATA
Du vergibst ja richtig gute Ratschläge..
Aber sorry wenn man es macht dann direkt richtig von Anfang an.
Denn er wird mit Sicherheit seine Programme nicht immer im "Borland Studio-Projekte" Pfad ablegen.
Dein Ratschlag ist also nicht zu empfehlen!

gruss

Popov 21. Feb 2014 08:19

AW: Ini Datei wird nicht erstellt...
 
Das Problem ist mit drei kleinen Änderungen für immer lösbar:
Delphi-Quellcode:
uses
  Registry; //<<<<<< IniFiles gegen Registry tauschen

procedure TForm1.erzeugeIni(IniName:string);
var
  ini: TRegIniFile; //<<<<<< TIniFile gegen TRegIniFile tauschen
begin
  ini := TRegIniFile.Create('Software\' + IniName); //<<<<<< TIniFile gegen TRegIniFile tauschen




  // INI-Datei erstellen (falls nicht vorhanden) und initialisieren
  try
  ini.WriteString('Sektion1', 'Eigenschaft1', 'Dein String');
  // String in Sektion1 unter Eigenschaft1 abspeichern
  ini.WriteInteger('Sektion2', 'Eigenschaft1', 1234);
  // Integerwert in Sektion2 unter Eigenschaft1 abspeichern
  ini.WriteBool('Sektion2', 'Eigenschaft2', True);
  // Wert vom Typ Boolean abspeichern
  finally
  ini.Free;
  // Variable ini wieder freigeben
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  erzeugeIni('MyKredinif');
end;
Delphi bietet für Ini auf Registry Umsteiger eine einfache Lösung. Einzig die Unit und Klasse wechseln, der Rest kann bleiben. Das Ergebnis landet in der Registry unter HKCU\Software\MyKredinif\...

bcvs 21. Feb 2014 08:34

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

Zitat von EWeiss (Beitrag 1248913)
Dein Ratschlag ist also nicht zu empfehlen!

gruss

Doch, ist er.
Man hat doch deutlich gesehen, dass der TE Probleme hat, eine Ini zu schreiben und wieder daraus zu lesen. Dann kam der Hinweis auf auf CSIDL_APPDATA und UAC und er hat sich in den Verzeichnissen verzettelt mit Favorites und Data\Roaming, obwohl die Schreibrechte ja nicht das Problem sind.

Deshalb jetzt mein Vorschlag, erstmal das Lesen/ Schreiben der ini in den Griff zu bekommen und dann die funktionierende Ini nach CSIDL_APPDATA zu verschieben. Ein Schritt nach dem anderen. Ich löse ungern zwei Probleme gleichzeitig. Das die Ini letztendlich nicht ins Programmverzeichnis gehört, ist unstrittig, das habe ich ja auch geschrieben.

DeddyH 21. Feb 2014 08:57

AW: Ini Datei wird nicht erstellt...
 
Und TRegIniFile kann auch nicht der Königsweg sein: zum Einen hatten wir vor Jahren mal einen Thread, der sich mit dieser Klasse auseinandersetzte und zu keinem wirklich positiven Ergebnis kam und zum Anderen hat man bei mobilen Anwendungen (die man z.B. auf dem USB-Stick mitnimmt) das Problem, dass man auf einem Rechner die Registry beschreibt und auf einem anderen die gespeicherten Einstellungen nicht zur Verfügung hat.

Popov 21. Feb 2014 10:03

AW: Ini Datei wird nicht erstellt...
 
Ich nutze die TRegIniFile schon seit Jahren, in zig Programmen um meine Einstellungen zu speichern, ohne je ein Problem damit gehabt zu haben.

Natürlich ist die Registry mit der TRegIniFile nur eingeschränkt nutzbar, bzw. nur der HKCU Teil. Auch ist die TRegIniFile der einfache Weg schnell von der Ini-Datei auf Reg zu wechseln. Das ist eben der Vorteil der TRegIniFile. Will man mehr, muss man die TRegistry nehmen. Sie ist mächtiger, dafür aber auch komplexer. Will man es einfach wie mit der Ini haben, reicht die TRegIniFile.

p80286 21. Feb 2014 10:32

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

Zitat von DeddyH (Beitrag 1248925)
Und TRegIniFile kann auch nicht der Königsweg sein: zum Einen hatten wir vor Jahren mal einen Thread, der sich mit dieser Klasse auseinandersetzte und zu keinem wirklich positiven Ergebnis kam und zum Anderen hat man bei mobilen Anwendungen (die man z.B. auf dem USB-Stick mitnimmt) das Problem, dass man auf einem Rechner die Registry beschreibt und auf einem anderen die gespeicherten Einstellungen nicht zur Verfügung hat.

Das Problem hast Du immer, je nachdem wie das Programm genutzt wird
a) die Programmdaten sind benutzerspezifisch (Benutzer\xxxx\AppData)
b) die Programmdaten sid rechnerspezifisch (Benutzer\default\Appdata)
c) die Programmdaten sind unabhängig (Netzlaufwerk)
d) Programm(daten)Verzeichnis auf einem Stick

(Wobei je nach Konfiguration die Verzeichnisnamen abweichen können.)

Irgendetwas klemmt immer, da gibt es keinen Königsweg, es sei denn, Du bastelst Dir etwas eigenes
z.B. c:\MeinProgramm\benutzer1\Meine.INI
Da könnte es allerdings Ärger mit dem Admin geben.

Gruß
K-H

DeddyH 21. Feb 2014 10:41

AW: Ini Datei wird nicht erstellt...
 
Für a) und b) gibt es ja vorgesehene Verzeichnisse (CSIDL_APPDATA bzw. CSIDL_COMMON_APPDATA). Und man kann ja auch eine Option anbieten, ob "normal" installiert oder mobil genutzt werden soll, was sich dann auf den Speicherort auswirkt. c) dürfte eher nicht dem Regelfall entsprechen und dann hat man ja ggf. noch eine Datenbank, wo man auch Einstellungen hinterlegen könnte. Mir ging es auch mehr um die Behauptung, dass ein Wechsel von TIniFile zu TRegIniFile alle Probleme der Welt lösen soll.

Popov 21. Feb 2014 10:56

AW: Ini Datei wird nicht erstellt...
 
Die Probleme der Welt sicherlich nicht, aber die Probleme aus dem Beitrag #1.

Wie gesagt, wenn es nur drum geht Einstellungen zu speichern, dann mache ich mir keinen Stress mit der TRegistry. Sorry, aber wenn ich mir manchmal hier Beispiele angucke und wie einige hier, nur um in der HKCU etwas zu speichern mit OpenKey und CloseKey usw. hantieren, dann frage ich mich wozu? Ich meine, wenn ich ein String brauche, kann ich einen String nehmen. Ich kann mir aber auch eine Klasse dafür erstellen. Komplizierter geht immer.

Und das Andere? Ich hab meinen Königsweg gefunden. Solange es nur um Einstellungen geht, geht alles bei mir über eine von drei Units. Je nachdem welche ich nehme, landen die Daten da wo ich will.

DeddyH 21. Feb 2014 11:03

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

Zitat von Popov (Beitrag 1248946)
Sorry, aber wenn ich mir manchmal hier Beispiele angucke und wie einige hier, nur um in der HKCU etwas zu speichern mit OpenKey und CloseKey usw. hantieren, dann frage ich mich wozu?

Damit sie Fehler mitbekommen und darauf reagieren können vielleicht? Aber da ich mich an den letzten Thread zu diesem Thema noch erinnern kann, sage ich lieber nichts mehr weiter dazu.

Bjoerk 21. Feb 2014 11:25

AW: Ini Datei wird nicht erstellt...
 
Vielleicht sollte man sich auch mal um die TForm1.leseIni kümmern, die kann ja wohl kaum so bleiben?

Schlage folgendes vor:

Delphi-Quellcode:
  TKreditRahmen = record
  private
    FKreditSummme: double;
    FRatenAnzahl: double;
    FRatenAnzahlung: double;
    FRestSummme: double;
    FSonderRate: double;
  public
    property KreditSummme: double read FKreditSummme write FKreditSummme;
    property RatenAnzahl: double read FRatenAnzahl write FRatenAnzahl;
    property RatenAnzahlung: double read FRatenAnzahlung write FRatenAnzahlung;
    property RestSummme: double read FRestSummme write FRestSummme;
    property SonderRate: double read FSonderRate write FSonderRate;
    procedure LoadFromIniFile(const FileName, Section: string);
    procedure SaveToIniFile(const FileName, Section: string);
    procedure Clear;
  end;

jaenicke 21. Feb 2014 12:23

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

Zitat von p80286 (Beitrag 1248940)
Das Problem hast Du immer, je nachdem wie das Programm genutzt wird

Dafür hatte ich ja mal eine Lösung bereitgestellt:
http://www.delphipraxis.net/134803-s...-0-rc-3-a.html
Die sind allerdings mittlerweile veraltet, mit heutigen Delphiversionen ließe sich das viel schöner umsetzen. Ich werde aber kaum in absehbarer Zeit daran etwas ändern können. Die Idee dahinter passt aber nach wie vor: Einfach an allen Stellen suchen, aber dem Benutzer die Wahl lassen, wenn er das möchte.

Popov 21. Feb 2014 12:32

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

Zitat von DeddyH (Beitrag 1248948)
Zitat:

Zitat von Popov (Beitrag 1248946)
Sorry, aber wenn ich mir manchmal hier Beispiele angucke und wie einige hier, nur um in der HKCU etwas zu speichern mit OpenKey und CloseKey usw. hantieren, dann frage ich mich wozu?

Damit sie Fehler mitbekommen und darauf reagieren können vielleicht? Aber da ich mich an den letzten Thread zu diesem Thema noch erinnern kann, sage ich lieber nichts mehr weiter dazu.

Also ich bin der Letzte der nicht bereit ist selbst lieb gewonnene Funktionen über Bord zu werfen. Wenn du also Infos oder Links hast, her damit, ich bilde mir dann meine Meinung evtl. neu.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.
Seite 1 von 2  1 2      

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