Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi erzeugen einer TInifile (https://www.delphipraxis.net/48444-erzeugen-einer-tinifile.html)

Haegar 25. Jun 2005 13:09


erzeugen einer TInifile
 
hallo,

nach ner großen delphipause, bin ich nun wieder am start, mehr oder weniger frisch ;)
ich hab Delphi 7 Enterprise, viell is das ja nen grund für ein anliegen, was ich aber bezweifel.

also folgendes:
ich erzeuge in meinem programm eine ini-datei, sofern sie nicht existiert, des weiteren trage ich gleich ne sektion ein und nen key + value...alles nur zum test. geht wunderbar, mein programmverzeichniss welches vorher keine *.ini aufwies hat nun eine drin....ich kann aus "ihr"!?!? auslesen und sektions inne combobox schreiben.
wenn ich allerdings die *.ini datei mit notepad öffne steht nicht ein buchstabe drin, folglich dacht ich mir such ich mal, kann ja nicht sein das ich etwas aus der datei auslese obwohl scheinbar nix drin is!
gesucht gefunden gestaunt.... und zwar habe ich nun 2 ini-datein mit demselben namen, sprich eine in meinem programmverzeichniss, und eine in dem ordern C:\WINNT .... und in der ini-datei in dem C:\WINNT-ordner stehen auch die einträge drin, die frage is nu für mich wie kommt die datei dahin, und warum wird denn so gesehen aus ihr ausgelesen/in ihr geschrieben und nicht in die in meinem programmordner!?

quellcode is an sich richtig, auch habe ich keinerlei verweise auf den C:\WINNT-ordner in meinem quellcode gemacht, deswegen poste ich erstmal keinen.

kann mir nu einer helfen und sagen was da intern passiert ist..ich hätte schon gern nur eine *.ini datei die in meinem programm erzeugt wird, und die sollte sich dann doch im programmordner befinden


gruss haegar

edit: huch kann es sein das ich nicht ganz die richtige sparte erwischt hab, wenn dem so is...asche auf mein haupt

Thanatos81 25. Jun 2005 13:18

Re: erzeugen einer TInifile
 
Wenn ich mich richtig erinne, musst du beim erzeugen/auslesen/beschreiben einer TIniFile den kompletten Pfad zu dieser angeben, sonst legt er sie automatisch im Windows-Verzeichnis ab. Da das bei dir der eigene Ordner sein soll, verusch doch mal den Dateinamen für die Ini mit
Delphi-Quellcode:
extractFilePath(paramstr(0))+'\meineIni.ini'
anzugeben.

Haegar 25. Jun 2005 13:29

Re: erzeugen einer TInifile
 
super sache, ging ja flott...das mit dem befehl war mir bekannt, nur hatte ich noch ne methode fileCreate drin, die mir da was verbaut hatte...
nun hatte ich grad das problem, das er die sections nicht erkannt hat, obwohl welche drin standen.
ich hatte diese mittels:

Delphi-Quellcode:
eventIni := TIniFile.Create('events.ini');
   events := TStringList.Create;
   eventIni.ReadSections(events);
auslesen wollen, allerdings fand er keine, er hat zwar die datei gefunden, aber keine sections drin, nun habe ich ebenfalls deinen code eingefügt, und siehe da es ging....ist es also generell so, das ich den kompletten Pfad angeben muss, auch wenn ich weiss das das ding im selben ordner liegt wie die exe-datei!?


gruss haegar

ltiefland 25. Jun 2005 13:34

Re: erzeugen einer TInifile
 
Zitat:

Zitat von Haegar
super sache, ging ja flott...das mit dem befehl war mir bekannt, nur hatte ich noch ne methode fileCreate drin, die mir da was verbaut hatte...
nun hatte ich grad das problem, das er die sections nicht erkannt hat, obwohl welche drin standen.
ich hatte diese mittels:

Delphi-Quellcode:
eventIni := TIniFile.Create('events.ini');
   events := TStringList.Create;
   eventIni.ReadSections(events);
auslesen wollen, allerdings fand er keine, er hat zwar die datei gefunden, aber keine sections drin, nun habe ich ebenfalls deinen code eingefügt, und siehe da es ging....ist es also generell so, das ich den kompletten Pfad angeben muss, auch wenn ich weiss das das ding im selben ordner liegt wie die exe-datei!?


gruss haegar

Wenn er NICHT im Windows-Ordner suchen soll, dann MUßT Du den Pfad mitangeben, egal wie Du auf die ".ini" zugreifst.

Speedmaster 25. Jun 2005 14:02

Re: erzeugen einer TInifile
 
Verzähl nix, es reicht wenn du deine Ini File so schreibst, b.z.w. auf sie zugreifst:
Delphi-Quellcode:
var
  IniFile: TMemIniFile;
begin
  IniFile := TMemIniFile.Create('.\' + Filename + '.ini');
  // Hier kommt dein Zeuchs hin was du machen willst
  // Zeuchs Ende :-)
  IniFile.Update;
  IniFile.Free;
end;

Christian Seehase 25. Jun 2005 14:23

Re: erzeugen einer TInifile
 
Moin Felix,

die Verwendung von relativen Pfaden ist immer gefährlich.
Beispielsweise genügt es einen OpenDialog im Programm zu haben, bei dem der Verzeichniswechsel erlaubt ist, und schon geht der Zugriff per relativem Pfad daneben.

100nF 25. Jun 2005 15:04

Re: erzeugen einer TInifile
 
hi,

aus dem
Delphi-Quellcode:
eventIni := TIniFile.Create('events.ini');
musst du das machen:
Delphi-Quellcode:
eventIni := TIniFile.Create(extractfilepath(application.exename)+'events.ini');

Luckie 25. Jun 2005 15:16

Re: erzeugen einer TInifile
 
Zitat:

Zitat von Speedmaster
Verzähl nix, es reicht wenn du deine Ini File so schreibst, b.z.w. auf sie zugreifst:
Delphi-Quellcode:
var
  IniFile: TMemIniFile;
begin
  IniFile := TMemIniFile.Create('.\' + Filename + '.ini');
  // Hier kommt dein Zeuchs hin was du machen willst
  // Zeuchs Ende :-)
  IniFile.Update;
  IniFile.Free;
end;

Schon mal geguckt was passiert, wenn du das Arbeitsverzeichnis änderst in der Verknüpfung oder mit einem Save- oder OpenDialog das aktuelle Verzeichnis änderst? Wohl nicht, sonst würdest du so etwas nicht behaupten.

marabu 25. Jun 2005 16:23

Re: erzeugen einer TInifile
 
Hallo Haegar,

ein Programm braucht eigentlich immer zwei INI-Dateien. Die erste liegt bei meinem Programm im Installationsverzeichnis. Sie wird nur gelesen und dient der Konfiguration durch den Administrator.

Delphi-Quellcode:
ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
Die zweite ist benutzerbezogen und enthält die impliziten (Fenstergrößen und -positionen, etc.) und expliziten Einstellungen (Hauptmenü: Optionen, Ansicht, etc.) des Benutzers.

Delphi-Quellcode:
resourcestring
  ENV_APPDATA = 'APPDATA';

function AppDataDir: string;
begin
  Result := GetEnvironmentVariable(ENV_APPDATA);
end;

begin
  ini := TIniFile.Create(AppDataDir + ChangeFileExt(ExtractFileName(ParamStr(0)), '.ini');
  ...
end;
Leichte Variationen je nach den Betriebsrichtlinien der Kunden existieren - das Konzept bleibt immer gleich.

Grüße vom marabu

phXql 25. Jun 2005 17:13

Re: erzeugen einer TInifile
 
Zitat:

Zitat von Speedmaster
Verzähl nix, es reicht wenn du deine Ini File so schreibst, b.z.w. auf sie zugreifst:
Delphi-Quellcode:
var
  IniFile: TMemIniFile;
begin
  IniFile := TMemIniFile.Create('.\' + Filename + '.ini');
  // Hier kommt dein Zeuchs hin was du machen willst
  // Zeuchs Ende :-)
  IniFile.Update;
  IniFile.Free;
end;

jo, dann nimmt er aber nich das verzeichnis, wo die exe drin liegt, sondern das letzte von deinem programm verwendete arbeitsverzeichnis. und wenn du das durch irgendeine operation mal geändert haben solltest, dann is deine INI eben da drin, obwohl sie eigentlich bei der EXE sein sollte...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 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