Entwickler-Ecke
Dateizugriff - Programm-Parameter wie festlegen?
rob87 - Mo 01.12.08 11:39
Titel: Programm-Parameter wie festlegen?
Hallo zusammen,
ich möchte beim Programmaufruf gewisse programm-spezifische Einstellungen vornehmen.
Also z.B: Ich starte das Programm mit dem Parameter "test" soll er halt gewisse Datenbank-Verbindungen, etc. kennen
Und diese Modi will ich aber während dem Programm bearbeiten können. Was meint ihr eignet sich dazu?? Also mir fällt eine: Eine INI-Datei oder (für meine Zwecke auch ausreichend) eine Textdatei oder was?
Also bsw. der Programmaufruf: C:\Programme\TEST1.EXE prgrvar.ini (die sucht er ja dann in C:\Windows\ oder?)
Und dann lädt er, Datenbank-Verknüpfung, E-Mail-Adressen, gemerkte CheckBox-Auswahl, etc...
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Mo 01.12.2008 um 10:48
Delete - Mo 01.12.08 11:40
TIniFile oder TRegistry wären IMHO die Mittel der Wahl (das hat mit Parametern im eigentlichen Sinne aber nichts zu tun).
rob87 - Mo 01.12.08 11:45
DeddyH hat folgendes geschrieben : |
TIniFile oder TRegistry wären IMHO die Mittel der Wahl (das hat mit Parametern im eigentlichen Sinne aber nichts zu tun). |
Hmmm... Und des sind dann keine Parameter, sondern is nur ein Datei-Aufruf? Kann ich des dann wie ne Textdatei behandeln, oder läuft des anders?
Delete - Mo 01.12.08 11:49
Ein Parameter wird über ParamStr(Index) abgefragt, wobei in ParamStr(0) immer der komplette Dateiname samt Pfad zum eigenen Programm steht. Und eine Ini ist eine Textdatei in einem vorgegebenen Format, die sich mit der Klasse TIniFile (Unit IniFiles) bequem bearbeiten/auslesen lässt. Ähnliches gilt für TRegistry, wobei das allerdings keine Textdatei ist.
rob87 - Mo 01.12.08 11:51
DeddyH hat folgendes geschrieben : |
Ein Parameter wird über ParamStr(Index) abgefragt, wobei in ParamStr(0) immer der komplette Dateiname samt Pfad zum eigenen Programm steht. Und eine Ini ist eine Textdatei in einem vorgegebenen Format, die sich mit der Klasse TIniFile (Unit IniFiles) bequem bearbeiten/auslesen lässt. Ähnliches gilt für TRegistry, wobei das allerdings keine Textdatei ist. |
OK. Dann werd ich mal mit dem Ini-File arbeiten. Und der Programmaufruf is dann z.B:
...\Programm.exe inifilename.ini oder?
Delete - Mo 01.12.08 11:56
Das wäre dann wieder ein Parameter. Wenn Du eine Ini auslesen willst, musst Du ein Objekt vom Typ TIniFile anlegen und damit arbeiten. Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var Ini: TIniFile; begin Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'DieIni.ini'); try Gruss := Ini.ReadString('Optionen','Gruss','Hallo'); ShowMessage(Gruss); finally Ini.Free; end; end; |
rob87 - Mo 01.12.08 12:00
Ok. Mal sehen, ob ich des hinkrieg ;-)
Moderiert von
Narses: Komplettzitat entfernt
rob87 - Mo 01.12.08 12:12
Zitat: |
ExtractFilePath(ParamStr(0)) + 'DieIni.ini') |
Das liefert mir den Pfad, wo meine EXE-Datei liegt. Wenn ich nun den Windows-Pfad will, schreib ich einfach:
Delphi-Quelltext
1:
| ini:=TIniFile.Create('C:\WINDOWS\ruf01.ini'); |
Edit: Basst!! Und nun kann ich damit rumarbeiten, wie in ner TXT-Datei.
Delete - Mo 01.12.08 12:18
*Ouch*, das Windows-Verzeichnis ist keine gute Idee, aber wenn schon, dann mit GetWindowsDirectory o.Ä. vorher ermitteln.
rob87 - Mo 01.12.08 12:24
DeddyH hat folgendes geschrieben : |
*Ouch*, das Windows-Verzeichnis ist keine gute Idee, aber wenn schon, dann mit GetWindowsDirectory o.Ä. vorher ermitteln. |
Du meinst, des is ned guad? Warum? Anderer Vorschlag? Ich bin ja offen ;-)
Delete - Mo 01.12.08 12:28
Wenn es sich um benutzerspezifische Daten handelt, gehören sie ins Profil des Benutzers (CSIDL_APPDATA), ansonsten ins Profil aller Benutzer (CSIDL_COMMON_APPDATA).
rob87 - Mo 01.12.08 12:33
DeddyH hat folgendes geschrieben : |
Wenn es sich um benutzerspezifische Daten handelt, gehören sie ins Profil des Benutzers (CSIDL_APPDATA), ansonsten ins Profil aller Benutzer (CSIDL_COMMON_APPDATA). |
Hmmm... Hast auch Recht. Also dann:
ini:=TIniFile.Create(ExtractFilePath(CSIDL_COMMON_APPDATA+'ruf01.ini');?? Ne, des is auch Quatsch
rob87 - Mo 01.12.08 12:38
Womit wir wieder beim alten wären ;-)
rob87 - Mo 01.12.08 12:38
Hät da aber noch schnell ne Frage. Was findet ihr eleganter? Beim Programmstart alle Sachen die ma braucht (sind bei mir ca. 10) in variablen schreiben und dann die ini wieder freigeben. oder bei jedem auslesen darauf zugreifen?? des is ne geschmacksache.. wie schauts da mit der performance aus?
Delete - Mo 01.12.08 12:42
Das kommt IMO ganz darauf an, ob es sich um ein Einzelbenutzer-Programm handelt und falls nicht, ob die Variablen immer aktuell sein müssen. Im letzteren Fall würde ich immer wieder auslesen.
rob87 - Mo 01.12.08 12:45
DeddyH hat folgendes geschrieben : |
Das kommt IMO ganz darauf an, ob es sich um ein Einzelbenutzer-Programm handelt und falls nicht, ob die Variablen immer aktuell sein müssen. Im letzteren Fall würde ich immer wieder auslesen. |
Hmmm... Stimmt auch wieder. Wenn ich was ändere, müsst ich sonst wieder die aktuellen Werte in die Variablen schreiben. Nene, des mach ma ned... Werd immer brav auslesen... ;-)
Merci. Thread is dicht! ;-)
jaenicke - Mo 01.12.08 14:04
Ich weise an dieser Stelle einmal auf meinen Beitrag zu Speicherpfaden hin, auch für spätere Leser dieses Threads:
http://www.delphi-library.de/viewtopic.php?p=499701
Die zweite Hälfte des Beitrags widmet sich unterhalb von "Dann gibt es da noch ein weiteres Problem:" dem Speichern im Anwendungsdatenverzeichnis. Auch eine Demo gibt es dort.
jaenicke - Mo 01.12.08 14:35
Richtig, aber nicht wie, und deshalb die Ergänzung, denn dein Link oben zeigt das nur an einem anderen Beispiel und warum wurde hier auch noch nicht erklärt. Es wurde nur gesagt, dass es da hin gehört ;-).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!