Wo Lege ich meine Userdaten hin ?..
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Wo Lege ich meine Userdaten hin ?..
Guten Morgen allerseits,
Wie ja evtl. bekannt, bin ich eigentlich Linux User und verdränge ähh vergesse immer mehr wie das unter Windoof so funktioniert hat.
Zu meiner Frage.
Ich habe also ein Programm geschrieben, welches die Firma für welche ich arbeite (bin so stolz dass ich meinen Chef überzeugen konnte Lazarus ein zu setzen) nun verkaufen will. Klar dass da ein Installer dabei ist und der Kunde das Programm natürlich überall hin kopieren kann. Nun ist es so, dass ein Kollege während unserer Tests hier im Haus das Programm nach "C:\Program Files\ProgrammName\" kopieren hat lassen (Programm Files, weil seit Virus Vista das System ja immer in Englisch ist, auch wenn der User es normalerweise in Deutsch sieht). Ansich ist das alles natürlich kein Problem, solange meine Anwendung keine Daten speichert, was sie natürlich macht. Selbstverständlich ist der Kollege kein Admin auf seiner Maschine und unter Windoof 7 stürzt meine Anwendung dann aufrund fehlender Schreibrechte in "C:\Program Files" ab.
Die Frage ist nun also, wo Speichere ich meine UserDaten korreckt ab. Bzw. Gibt es eine Funktion welche mir unter Windoof XP, Vista und 7 einen Basisordnernamen Liefert in dem ich auch ohne Admin Rechte Garantiert Schreib rechte habe ?
Ich denke da an so Ordner wie "C:\Dokumente und Einstellungen\<username>\Anwendungsdaten". Oder gibt es etwa noch andere "saubere" Wege Userdaten zu speichern (die TRegistry kenne ich, reicht mir aber nicht aus, da ich Client Programme aufrufe, welche mittels "Datei Nachrichten" mit mir Kommunizieren, ich benötige also in jedem Fall einen Ordner in dem ich Dateien erstellen und löschen darf).
Grüße aus der Linux Welt
Corpsman
Wie ja evtl. bekannt, bin ich eigentlich Linux User und verdränge ähh vergesse immer mehr wie das unter Windoof so funktioniert hat.
Zu meiner Frage.
Ich habe also ein Programm geschrieben, welches die Firma für welche ich arbeite (bin so stolz dass ich meinen Chef überzeugen konnte Lazarus ein zu setzen) nun verkaufen will. Klar dass da ein Installer dabei ist und der Kunde das Programm natürlich überall hin kopieren kann. Nun ist es so, dass ein Kollege während unserer Tests hier im Haus das Programm nach "C:\Program Files\ProgrammName\" kopieren hat lassen (Programm Files, weil seit Virus Vista das System ja immer in Englisch ist, auch wenn der User es normalerweise in Deutsch sieht). Ansich ist das alles natürlich kein Problem, solange meine Anwendung keine Daten speichert, was sie natürlich macht. Selbstverständlich ist der Kollege kein Admin auf seiner Maschine und unter Windoof 7 stürzt meine Anwendung dann aufrund fehlender Schreibrechte in "C:\Program Files" ab.
Die Frage ist nun also, wo Speichere ich meine UserDaten korreckt ab. Bzw. Gibt es eine Funktion welche mir unter Windoof XP, Vista und 7 einen Basisordnernamen Liefert in dem ich auch ohne Admin Rechte Garantiert Schreib rechte habe ?
Ich denke da an so Ordner wie "C:\Dokumente und Einstellungen\<username>\Anwendungsdaten". Oder gibt es etwa noch andere "saubere" Wege Userdaten zu speichern (die TRegistry kenne ich, reicht mir aber nicht aus, da ich Client Programme aufrufe, welche mittels "Datei Nachrichten" mit mir Kommunizieren, ich benötige also in jedem Fall einen Ordner in dem ich Dateien erstellen und löschen darf).
Grüße aus der Linux Welt
Corpsman
--
Just try it
Just try it
- willi4willi
- Lazarusforum e. V.
- Beiträge: 155
- Registriert: Sa 1. Nov 2008, 18:06
- OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
- CPU-Target: i386, win64, arm
Re: Wo Lege ich meine Userdaten hin ?..
Guten Morgen!
Also mein Tipp wäre, die Daten im Benutzerprofil abzulegen. Wenn im Netzwerk wandernde Profile verwendet werden, dann sollte man darauf achten, dass das Zielverzeichnis nicht mit dem Server synchronisiert wird.
Das Benutzerprofil erhält man mit
Müssen andere lokale User ebenfalls darauf zugreifen?
Wenn andere User auch Zugriff benötigen, dann ist dieses Verzeichnis sicherlich besser:
Für größere Applikationen lege ich Daten immer auf einer separaten Partition/Laufwerk ab. Wenn man mal Windows neu installieren muss (soll ja vorkommen), dann sind diese wenigstens nicht betroffen.
Viele Grüße
Willi4willi
PS: Ich nutze Windows 7.
Also mein Tipp wäre, die Daten im Benutzerprofil abzulegen. Wenn im Netzwerk wandernde Profile verwendet werden, dann sollte man darauf achten, dass das Zielverzeichnis nicht mit dem Server synchronisiert wird.
Das Benutzerprofil erhält man mit
Code: Alles auswählen
getenvironmentvariable('USERPROFILE');
Müssen andere lokale User ebenfalls darauf zugreifen?
Wenn andere User auch Zugriff benötigen, dann ist dieses Verzeichnis sicherlich besser:
Code: Alles auswählen
getenvironmentvariable('PUBLIC');
Für größere Applikationen lege ich Daten immer auf einer separaten Partition/Laufwerk ab. Wenn man mal Windows neu installieren muss (soll ja vorkommen), dann sind diese wenigstens nicht betroffen.
Viele Grüße
Willi4willi
PS: Ich nutze Windows 7.
Viele Grüße
Willi4Willi
------------
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..
also
sieht schon echt gut an, zeigt bei mir auf "C:\Dokumente und Einstellungen\<User>"
Da fehlt quasi noch das "Anwendungsdaten", ich hätte aber auch keinen Schmerz damit, in dem User Verzeichniss direkt mein Unterverzeichniss an zu legen.
Ein Netzwerklaufwerk, darf ich auf keinen Fall nutzen, denn die Client Anwendung welche ich benutze, kann ( aus welchen Gründen auch immer ) nicht mit Dateien auf Netzlaufwerken arbeiten.
Da kommen natürlich gleich die Nächsten Fragen auf :
o Wo kann ich einsehen was für "mögliche" Parameter ich "getenvironmentvariable" übergeben darf, evtl finde ich so noch einen geeigneteren
=> bzw. Hat Google mir http://en.wikipedia.org/wiki/Environment_variable vorgeschlagen und da gibts das Wort "APPDATA", das sieht sehr nach dem aus was ich haben will, kennst du das ?
o Funktioniert das Plattformunabhängig ? Denn zumindest zur Zeit noch könnte meine Anwendung auch auf Linux/ Mac Laufen und ich würde mir dann im Source Vermerken wenn das nicht Portable ist...
Code: Alles auswählen
getenvironmentvariable('USERPROFILE');
sieht schon echt gut an, zeigt bei mir auf "C:\Dokumente und Einstellungen\<User>"
Da fehlt quasi noch das "Anwendungsdaten", ich hätte aber auch keinen Schmerz damit, in dem User Verzeichniss direkt mein Unterverzeichniss an zu legen.
Ein Netzwerklaufwerk, darf ich auf keinen Fall nutzen, denn die Client Anwendung welche ich benutze, kann ( aus welchen Gründen auch immer ) nicht mit Dateien auf Netzlaufwerken arbeiten.
Da kommen natürlich gleich die Nächsten Fragen auf :
o Wo kann ich einsehen was für "mögliche" Parameter ich "getenvironmentvariable" übergeben darf, evtl finde ich so noch einen geeigneteren
=> bzw. Hat Google mir http://en.wikipedia.org/wiki/Environment_variable vorgeschlagen und da gibts das Wort "APPDATA", das sieht sehr nach dem aus was ich haben will, kennst du das ?
o Funktioniert das Plattformunabhängig ? Denn zumindest zur Zeit noch könnte meine Anwendung auch auf Linux/ Mac Laufen und ich würde mir dann im Source Vermerken wenn das nicht Portable ist...
--
Just try it
Just try it
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..
Für den ganzen Spaß hier gibt es doch schon fertige Funktionen in der Unit Sysutils.
GetUserDir() liefert das Benutezerverzeichnis. Dort Anwendungsdaten abzulegen ist zwar üblich, gehört aber nicht zum guten Ton (der Benutzer muss die Dateien schließlich nicht immer manuell öffnen).
GetAppConfigDir() gibt dir ein Verzeichnis für Konfigurationsdateien zurück. Unter Windows wird da auf die Umgebungsvariable APPDATA zurückgegriffen.
Eine Übersicht über die aktuellen Umgebungsvariablen erhältst du unter Windows mit set und unter Linux mit env, jeweils auf der Konsole eingegeben.
GetUserDir() liefert das Benutezerverzeichnis. Dort Anwendungsdaten abzulegen ist zwar üblich, gehört aber nicht zum guten Ton (der Benutzer muss die Dateien schließlich nicht immer manuell öffnen).
GetAppConfigDir() gibt dir ein Verzeichnis für Konfigurationsdateien zurück. Unter Windows wird da auf die Umgebungsvariable APPDATA zurückgegriffen.
Eine Übersicht über die aktuellen Umgebungsvariablen erhältst du unter Windows mit set und unter Linux mit env, jeweils auf der Konsole eingegeben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Wo Lege ich meine Userdaten hin ?..
Prinzipiell gibt es (mindestens) drei Arten von Konfigurations-Daten:
1) Solche, die nur bei der Installation (also i.A. vom Administrator) schreibbar sind und vom normalen User nur gelesen werden können. Sie gelten unabhängig davon, welcher User das Programm startet. ( GetAppConfigDir() )
2) Solche die für jeden User unabhängig sind (kann nur der aktuelle User lesen und schreiben) ( GetUserDir() )
3) Solche, die dynamisch für alle User gemeinsam sind (kann jeder User lesen und schreiben). (Recht selten gebraucht. )
Für alle gibt es entsprechende (Betriebssystem-abhängige) Positionen und (hoffentlich) (Betriebssystem-unabhängige) Funktionen in der LCL, um sie herauszufinden.
Ich habe (für Delphi) einmal eine erweiterte TInifile Klasse gebaut, die eine Property zur Selektion einer der drei Varianten hat.
-Michael
1) Solche, die nur bei der Installation (also i.A. vom Administrator) schreibbar sind und vom normalen User nur gelesen werden können. Sie gelten unabhängig davon, welcher User das Programm startet. ( GetAppConfigDir() )
2) Solche die für jeden User unabhängig sind (kann nur der aktuelle User lesen und schreiben) ( GetUserDir() )
3) Solche, die dynamisch für alle User gemeinsam sind (kann jeder User lesen und schreiben). (Recht selten gebraucht. )
Für alle gibt es entsprechende (Betriebssystem-abhängige) Positionen und (hoffentlich) (Betriebssystem-unabhängige) Funktionen in der LCL, um sie herauszufinden.
Ich habe (für Delphi) einmal eine erweiterte TInifile Klasse gebaut, die eine Property zur Selektion einer der drei Varianten hat.
-Michael
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..
In Lazarus ist das, was ich hier schreibe, nicht vorbereitet, weil Lazarus für mehr Platformen als nur Windows compilieren soll. Ich hab es trotzdem mal aus meinem Delphi 5 herauskopiert, weil es hilft, mit Windows konform zu gehen.
Siehe auch
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762204%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188%28v=vs.85%29.aspx
Code: Alles auswählen
const shell32 = 'shell32.dll';
const
CSIDL_DESKTOP = $0000;
CSIDL_INTERNET = $0001;
CSIDL_PROGRAMS = $0002;
CSIDL_CONTROLS = $0003;
CSIDL_PRINTERS = $0004;
CSIDL_PERSONAL = $0005;
CSIDL_FAVORITES = $0006;
CSIDL_STARTUP = $0007;
CSIDL_RECENT = $0008;
CSIDL_SENDTO = $0009;
CSIDL_BITBUCKET = $000a;
CSIDL_STARTMENU = $000b;
CSIDL_MYMUSIC = $000d;
CSIDL_MYVIDEO = $000e;
CSIDL_DESKTOPDIRECTORY = $0010;
CSIDL_DRIVES = $0011;
CSIDL_NETWORK = $0012;
CSIDL_NETHOOD = $0013;
CSIDL_FONTS = $0014;
CSIDL_TEMPLATES = $0015;
CSIDL_COMMON_STARTMENU = $0016;
CSIDL_COMMON_PROGRAMS = $0017;
CSIDL_COMMON_STARTUP = $0018;
CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
CSIDL_APPDATA = $001a;
CSIDL_PRINTHOOD = $001b;
CSIDL_ALTSTARTUP = $001d;
CSIDL_COMMON_ALTSTARTUP = $001e;
CSIDL_COMMON_FAVORITES = $001f;
CSIDL_INTERNET_CACHE = $0020;
CSIDL_COOKIES = $0021;
CSIDL_HISTORY = $0022;
CSIDL_WINDOWS = $0024;
CSIDL_PROGRAM_FILES = $0026;
CSIDL_MYPICTURES = $0027;
CSIDL_PROFILE = $0028;
function SHGetSpecialFolderPathA(hwndOwner: HWND; lpszPath: PAnsiChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall;
function SHGetSpecialFolderPathW(hwndOwner: HWND; lpszPath: PWideChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall;
function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall;
function SHGetSpecialFolderPathA; external shell32 name 'SHGetSpecialFolderPathA'
function SHGetSpecialFolderPathW; external shell32 name 'SHGetSpecialFolderPathW'
function SHGetSpecialFolderPath; external shell32 name 'SHGetSpecialFolderPathA'
Siehe auch
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762204%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188%28v=vs.85%29.aspx
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..
Ich hab sie in der online Hilfe nicht gefunden, aber die Deklarationen, die ich aufgelistet habe, sind auch in Lazarus vorhanden.
Einfach uses ShlObj einfügen.
Einfach uses ShlObj einfügen.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..
Also wenn ich Socke richtig verstehe, dann sollte ich
GetAppConfigDir()
nehmen. Denn das ist Betriebsystemunabhängig und macht mit dem Parameter (False) eigentlich auch, dass was ich will.
Ist aber nicht = Appdata denn :
AppData = C:\Dokumente und Einstellungen\<UserName>\Anwendungsdaten
GetAppConfigDir(false ) = C:\Dokumente und Einstellungen\<UserName>\Lokale Einstellungen\Anwendungsdaten
GetAppConfigDir()
nehmen. Denn das ist Betriebsystemunabhängig und macht mit dem Parameter (False) eigentlich auch, dass was ich will.
Ist aber nicht = Appdata denn :
AppData = C:\Dokumente und Einstellungen\<UserName>\Anwendungsdaten
GetAppConfigDir(false ) = C:\Dokumente und Einstellungen\<UserName>\Lokale Einstellungen\Anwendungsdaten
--
Just try it
Just try it
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..
mschnell hat geschrieben:1) Solche, die nur bei der Installation (also i.A. vom Administrator) schreibbar sind und vom normalen User nur gelesen werden können. Sie gelten unabhängig davon, welcher User das Programm startet. ( GetAppConfigDir() )
2) Solche die für jeden User unabhängig sind (kann nur der aktuelle User lesen und schreiben) ( GetUserDir() )
Die Funktion GetAppConfigDir() liefert je nach Parameter das Verzeichnis für Dateien wie unter Punkt #1 und Punkt #2 beschrieben. Direkt in das Benutzer-Verzeichnis gehören keine Konfigurationsdateien! Dazu gibt es Unterverzeichnisse, damit nicht zwischen den selbst erstellten Daten auch noch unbekannte Dateien in unbekannter Anzahl von unbekannten Programmen herumliegen. Unter Windows NT ist das AppData ("Anwendungsdaten"); unter Linux .config.
Jetzt ratet mal, warum beide Verzeichnisse versteckt sind ...
Edit: Die Frage ist, welche Daten du speichern möchtest. Das Verzeichnis Anwendungsdaten ist für benutzerabhängige aber rechnerunabhängige Programmdaten. Lokale Einstellungen ist für benutzer- und rechnerabhängige Programmdaten. Einen guten Überblick -- auch über die Änderungen zu den Win-XP-Nachfolgern -- findest du bei Microsoft
Edit2: Free Pascal übernimmt diese Unterscheidung nicht beziehungsweise bietet nur eine Funktion für ein Verzeichnis an.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..[gelöst]
ups sry,
natürlich lege ich in Anwendugnsdaten noch ein passendes Unterverzeichniss an, alles andere wäre "Grob Fahrlässig"
Im Prinzip ist es genau dass was ich speichern will. Deswegen passt GetAppConfigDir(false) auch wunderbar. Nachdem ich mit dem Programm aber eben Beruflich unterwegs bin und nicht irgend nen kostenlosten Privat Kram mache, wollte ich quasi eure weiterführende Meinung dazu.
Vielen Dank allen beteiligten.
natürlich lege ich in Anwendugnsdaten noch ein passendes Unterverzeichniss an, alles andere wäre "Grob Fahrlässig"
Socke hat geschrieben:Lokale Einstellungen ist für benutzer- und rechnerabhängige Programmdaten
Im Prinzip ist es genau dass was ich speichern will. Deswegen passt GetAppConfigDir(false) auch wunderbar. Nachdem ich mit dem Programm aber eben Beruflich unterwegs bin und nicht irgend nen kostenlosten Privat Kram mache, wollte ich quasi eure weiterführende Meinung dazu.
Vielen Dank allen beteiligten.
--
Just try it
Just try it
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: Wo Lege ich meine Userdaten hin ?..
Hallo Leute
Ich habe folgendes Problem:
Weder
noch
funktionieren bei mir, es kommt immer die compilermeldung:
Vieleicht liegt das an meiner Lazarus-version...(1.0), denn früher als ich noch 0.9.... hatte ging das noch...
Bitte um Hilfe,
Komoluna
Ich habe folgendes Problem:
Weder
Code: Alles auswählen
Getuserdir(false);//oder (true);
noch
Code: Alles auswählen
GetEnvironmentVariable('...')
funktionieren bei mir, es kommt immer die compilermeldung:
Code: Alles auswählen
Unit1.pas(...,...) Error: Wrong number of parameters specified for call to "GetUserDir"// oder "GetEnvironmentVariable"
Vieleicht liegt das an meiner Lazarus-version...(1.0), denn früher als ich noch 0.9.... hatte ging das noch...
Bitte um Hilfe,
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
Re: Wo Lege ich meine Userdaten hin ?..
Wie kommst du auf die Idee, GetUserDir benötige einen Parameter?
Warum schaust du nicht einfach nach im Quellcode, oder in der Hilfe?
http://lazarus-ccr.sourceforge.net/docs ... erdir.html
Warum schaust du nicht einfach nach im Quellcode, oder in der Hilfe?
http://lazarus-ccr.sourceforge.net/docs ... erdir.html
-
- Beiträge: 167
- Registriert: Mo 20. Okt 2008, 20:50
- OS, Lazarus, FPC: macOS 10.4-13.4, Windows 2000-11, Raspbian (L 2.2.6, FPC 3.2.2)
- CPU-Target: PowerPC, Intel, ARM
- Wohnort: Hattingen, NRW
- Kontaktdaten:
Re: Wo Lege ich meine Userdaten hin ?..
Leider ist GetAppConfigDir nicht so wirklich plattformunabhängig, da es auf dem Mac ein falsches Verzeichnis zurückliefert.
Funktionsfähig auf Mac, Windows und Linux ist die folgende Funktion, die ich in meinen Programmen verwende:
Funktionsfähig auf Mac, Windows und Linux ist die folgende Funktion, die ich in meinen Programmen verwende:
Code: Alles auswählen
function GetPreferencesFolder: String;
{ platform-independend method to search for the location of preferences folder}
const
kMaxPath = 1024;
var
{$IFDEF DARWIN}
theError: OSErr;
theRef: FSRef;
{$ENDIF}
pathBuffer: PChar;
begin
{$IFDEF DARWIN}
try
pathBuffer := Allocmem(kMaxPath);
except on exception do exit;
end;
try
Fillchar(pathBuffer^, kMaxPath, #0);
Fillchar(theRef, Sizeof(theRef), #0);
theError := FSFindFolder(kOnAppropriateDisk, kPreferencesFolderType, kDontCreateFolder, theRef);
if (pathBuffer <> nil) and (theError = noErr) then
begin
theError := FSRefMakePath(theRef, pathBuffer, kMaxPath);
if theError = noErr then GetPreferencesFolder := UTF8ToAnsi(StrPas(pathBuffer)) + '/';
end;
finally
Freemem(pathBuffer);
end
{$ELSE}
GetPreferencesFolder := GetAppConfigDir(false);
{$ENDIF}
end;