Delphi ini-Datei Vista / XP / win7
Frage
Update: Ich habe den folgenden Code hinzugefügt:
function TSettingsForm.AppDataPath: string;
//CSIDL_APPDATA Individual user Data
//CSIDL_COMMON_APPDATA Common to Computer Data
// works so long as people have at least IE 4. (and Win95 or better)
var
r: Bool;
path: array[0..Max_Path] of Char;
begin
r := ShGetSpecialFolderPath(0, path, CSIDL_APPDATA, False) ;
if r then result := path
else result := '';
end;
Und ich habe die setinifilename Funktion geändert (siehe unten). Es wird nicht die Ordnerstruktur erstellen.
- Ende update--
Ich bin hinter der Zeit, was immer und nicht zu tun. Dies ist, wie ich zur Zeit die Einstellungen für meine Software zu speichern. Getestet habe ich es nur auf Vista nicht als Administrator angemeldet sind, und es gibt mir eine Fehlermeldung kann nicht INI-Datei schreiben. Also ich vermute, ich soll die Daten an einen Datenordner schreiben? Ich habe noch nie vista / win7, bevor sie verwendet, und wollen diese Software Fenster sein 2K + kompatibel. Was soll ich die Einstellungen speichern tun. Ich auch wollte wirklich nicht mit der Registrierung zu verwirren, weil jedes Bisschen Sie es, verlangsamt den Computer nur hinzufügen, dass viel mehr ... (oder so scheint es)
Vielen Dank für jede Eingabe.
procedure TSettingsForm.setinifilename;
var filename:string;
Path:string;
begin
filename:='key.ini';
path:=AppDataPath+'\MyCompanyName\ProductName\';
if NOT DirectoryExists(path) then
CreateDir(path);
inifilename:= path+filename;
end;
procedure TSettingsForm.SaveSettings;
var
appINI: TIniFile;
begin
appINI := TIniFile.Create(inifilename) ;
try
low:= Trunc (edt_low.value);
high:=Trunc (edt_high.value);
appINI.WriteInteger('SPEED','LOW',low);
appINI.WriteInteger('SPEED','HIGH',high);
appINI.WriteString('PROXY','SERVER',edtProxyServer.Text);
appINI.WriteString('PROXY','PORT',edtProxyPort.Text);
appINI.WriteString('PROXY','USERNAME',edtProxyUserName.Text);
appINI.WriteString('PROXY','PASSWORD',edtProxyPass.Text);
// status.text:='Saved Data';
finally
appIni.Free;
end;
end;
procedure TSettingsForm.GetSettings;
Var
appINI : TIniFile;
begin
appINI := TIniFile.Create(inifilename) ;
try
//if no last user return an empty string
edt_low.value:= appINI.ReadInteger('SPEED','LOW',0);
edt_high.value:= appINI.ReadInteger('SPEED','HIGH',0);
low:= Trunc (edt_low.Value);
high := Trunc (edt_high.Value);
edtProxyServer.Text:=appINI.ReadString('PROXY','SERVER','');
edtProxyPort.Text:=appINI.ReadString('PROXY','PORT','0');
edtProxyUserName.Text:=appINI.ReadString('PROXY','USERNAME','');
edtProxyPass.Text:= appINI.ReadString('PROXY','PASSWORD','');
finally
appINI.Free;
end;
end;
Lösung
In Vista, das Programm nicht zu schreiben, um das Programm Datei Verzeichnis erlaubt ist, wo Ihr Programm befindet.
Sie müssen jetzt Ihre INI-Dateien im AppData-Verzeichnis speichern.
Eine Beschreibung, wie dies in delphi zu tun ist: http://www.theabsolute.net/sware/delphivista.html#datafolder
Und sein Vista / Windows 7 kompatibel, der Rest dieser Webseite wird eine gute Richtschnur sein.
Für das Update können Sie nicht CreateDir mehr als 1 Ebene tief auf einmal. Verwenden Sie die Force funktionieren statt:
path:=AppDataPath+'\MyCompanyName\ProductName\';
if NOT DirectoryExists(path) then
ForceDirectories(path);
P. S. Haben Sie keine Angst Programmeinstellungen in der Registrierung zu schreiben. Das ist, was die Registrierung ist für. In der Tat, behandelt es richtig Einstellungen für verschiedene Benutzer für Sie, wenn andere Benutzer angemeldet sind. Das Register arbeitet in der gleichen Art und Weise in 98 / Vista / 7. Während ini-Dateien haben abgeschrieben tatsächlich sind, und nicht mehr von Windows verwendet werden.
Sie sagen, Sie wollen nicht mit der Registrierung zu verwirren, weil „jedes Bisschen Sie es, verlangsamt den Computer nur hinzufügen, dass viel mehr“. Eigentlich ist das nicht wahr. Die Registrierung ist einfach eine Datenbank. Und wenn es 10 MB oder 100 MB ist, es ist der Unterschied in der Zeit für den Zugriff erfolgt ist imperceptable.
Es ist all diese Unternehmen verkaufen Registry Cleaner Programme, die dieses Märchen zu halten versuchen würde. ihre Reiniger verwenden, können Sie mehr schaden als nützen. Alles, was sie tun müssen, um ein oder zwei wichtige Einträge auszulöschen und Sie in tiefen doo-doo sein kann. Bitte lesen Sie diesen Artikel über Registry-Reiniger , und vor allem die „Marginal Performance-Vorteil“ Abschnitt, der richtig erklärt dass die Probleme in Windows 98 und früher bei der Kanzlei hatten wurden meist festgelegt.
Wenn Ihr Programm fügt mehr als 2 oder 3 KB an die Kanzlei, das wird eine Menge sein, und es ist eine unbedeutende Menge. Verwenden Sie die Registrierung. Machen Sie es gleich.
Andere Tipps
Sie sollten das Anwendungsdaten-Verzeichnis für Ihre App-Daten verwenden, in Delphi Sie diesen Ordner programmatisch die Shell api-Funktion finden SHGetSpecialFolderLocation
Embarcadero eine FAQ-Seite zu diesem Thema haben, hier.
Wie bereits erwähnt -. Sie nicht speichern alles in der App-Ordner
Sie sollten Ihre Konfigurationseinstellungen in zwei Teile aufgeteilt:
Ein Teil der Einstellungen, muss Arbeit regardlees des Benutzers enthalten, -., Dass ein Teil in COMMON_APPDATA gespeichert werden soll
Ein zweiter Teil enthält die einzelnen Benutzer-Einstellungen (Benutzer persönliche Wahl der Schriftart usw.) -, dass ein Teil in APPDATA gespeichert werden soll
Wie für die CreateDir, ist es wahr, dass Sie nicht mehr als eine Ebene zu einer Zeit erstellen können - aber Delphi hat die Force Funktion, die genau das tun.
z. Force ( 'C: \ MyFolder \ SubFolder \ SubSubFolder');