Da bei einigen offenbar rege Begriffsverwirrung herrscht, möchte ich das bisher Gesagte noch einmal zusammenfassen:
Das Anwendungsverzeichnis ändert sich nicht, während das Programm läuft:
Delphi-Quellcode:
Anwendungsverzeichnis := SysUtils.ExtractFilePath(System.ParamStr(0));
Anwendungsverzeichnis := SysUtils.ExtractFilePath(Forms.Application.ExeName);
Das Arbeitsverzeichnis kann sich während des Programmlaufs jedoch ändern, z.B. durch einen Aufruf von OpenDialg oder SaveDialog:
Delphi-Quellcode:
Arbeitsverzeichnis := SysUtils.GetCurrentDir;
Wenn ich im Programm ein festes Verzeichnis benötige, das sich nicht ändern soll, dann lege ich dieses Verzeichnsi beim Programmstart fest, z.B. den Ort, an dem die benötigte Firebird-Datenbank zu finden ist:
Delphi-Quellcode:
Const
DB_Datei = 'MeineDatenbank.FDB';
Var
DB_DateiName,
DB_DateiPfad : String;
Diesen Speicherort ermittle ich entweder durch einen OpenDialog oder lege ihn in einer Ini-Datei fest (das kann auch ein einfaches
Ascii-File mit nur einer Zeile sein). Diese Ini-Datei speichere ich
nur dann im Anwendungsverzeichnis, wenn
1. sie
nicht vom Programm verändert zurückgeschrieben werden soll und/oder
2. es sich um eine portable Anwendung handelt, die sich
nicht in einem der Windows-Systemordner befindet.
Ansonsten speichert man Ini-Dateien (und andere, die man benötigt) im Benutzer-Verzeichns, und zwar bei:
WinXP entweder unter \AllUsers\Anwendungsdaten oder \[CurrentUser]\Anwendungsdaten
Win7 entweder unter \Users\Public\Documents\MeineAnwendungsDaten\ oder entsprechend unter \Users\[CurrentUser]\
Win 8 weiß ich nicht, hab ich nicht ...
Oder man setzt entsprechende Registry-Einträge und erfährt dann aus der Registry alle notwendigen festen Verzeichnisse.