gpt4 book ai didi

Delphi ini 文件 vista/xp/win7

转载 作者:行者123 更新时间:2023-12-03 15:17:38 24 4
gpt4 key购买 nike

更新:我添加了以下代码:


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;

我已经更改了 setinifilename 函数(见下文)。它不会创建文件夹结构。

--更新结束--

我在该做什么和不该做什么方面落后于时代。这就是我当前保存软件设置的方式。我刚刚在未以管理员身份登录的 Vista 上进行了测试,它给我一条错误消息“无法写入 ini 文件”。所以我猜我应该将数据写入数据文件夹?我以前从未使用过vista/win7,希望这个软件兼容windows 2K+。我应该怎么做才能保存设置。我也真的不想弄乱注册表,因为你添加到注册表中的每一点都会使计算机速度减慢更多......(或者看起来是这样)

感谢您的任何意见。



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;

最佳答案

在 Vista 中,您的程序不允许写入程序所在的程序文件目录。

您现在必须将 ini 文件保存在 AppData 目录中。

有关如何在 delphi 中执行此操作的说明位于: http://www.theabsolute.net/sware/delphivista.html#datafolder

为了兼容 Vista/Windows 7,该网页的其余部分将是一个很好的指导。

<小时/>

对于您的更新,您不能一次创建超过 1 层深度的目录。使用ForceDirectories function相反:

    path:=AppDataPath+'\MyCompanyName\ProductName\'; 
if NOT DirectoryExists(path) then
ForceDirectories(path);
<小时/>

附:不要害怕将程序设置写入注册表。这就是注册表的用途。事实上,当不同用户登录时,它会正确地为您处理不同用户的设置。注册表在 98/Vista/7 中的工作方式相同。而 ini 文件实际上已经被贬值,并且不再被 Windows 使用。

您说您不想弄乱注册表,因为“您向注册表添加的每一点都会使计算机速度减慢得多”。事实上那不是真的。注册表只是一个数据库。而如果是10MB或100MB,访问时间的差异是难以察觉的。

所有销售注册表清理程序的公司都在努力让这个童话继续下去。使用他们的清洁剂弊大于利。他们所需要做的就是清除一两个重要条目,然后您就可以陷入困境。请阅读this article about Registry Cleaners ,特别是“边际性能优势”部分,它正确地解释了 Windows 98 及更早版本的注册表问题已大部分得到解决。

如果您的程序向注册表添加了超过 2 或 3 KB,那么这将是一个很大的量,而且这是一个微不足道的量。使用注册表。正确行事。

关于Delphi ini 文件 vista/xp/win7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2090868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com