delphi ini 文件、操作
.ini 文件是基于文本的文件,主要用于存储任何应用程序的配置数据。
虽然我们知道在 Windows 中最好使用 Windows Registry 来存储应用程序的配置,但随着 Delphi 的新版本,并且主要是在多设备开发中,我们不想为每个平台编写代码,这就是为什么我建议处理所有平台的 ini 文件的原因。
INI 文件,格式
配置或初始化 .INI 文件是文本文件,限制为 64 KB,分为多个部分,每个部分可以有零个或多个键。这些键中的每一个都可以不包含或包含多个值。
.ini 文件示例
;comentario
[Sección1]
Key1=Value1
Key2=Value2
Key3=
[Sección2]
Key4=Value4
Key2=Value2
Key5=
节名称必须用方括号括起来,并且必须从一行的开头开始。部分名称和键不区分大小写,并且不能包含空格字符。
键名后面总是跟一个等号(“=”),它可能有也可能没有空格字符,它们被忽略。
现在,如果在一个 .ini 文件中,我们有多个同名的部分,最后一次出现为准,就好像在一个部分中我们有多个同名的键。
一个键可以包含以下数据:
细绳
整数
漂浮
布尔值
约会时间
TIniFile 类
Delphi 提供了TIniFile类 ,在inifiles.pas单元中声明, 提供了 从 .INI 文件中存储和检索值的方法。
在开始使用 TIniFile 类的方法之前,必须创建该类的一个实例:
use inifiles;
...
var
ArchivoIni: TIniFile;
begin
ArchivoIni: = TIniFile.Create ('config.ini');
前面的代码创建了IniFile对象并将文件名“config.ini”分配给类的唯一属性 FileName 属性 ,用于指定要使用的 INI 文件的名称。
上面编写的代码 在Windows默认目录中查找 config.ini 文件。但是如果我们想将 .ini 文件与可执行文件放在同一个文件夹中(这将是最正确的),我们可以通过在实例化对象时指定可执行文件的路径来实现:
// Creamos el archivo config.ini
// en la misma carpeta del ejecutable
iniFile := TIniFile.Create(ExtractFilePath(ParamStr(0))+'config.ini'));
如何读取 .ini 文件
TIniFile类对每个键值都有几个读取方法。
ReadString:读取一串字符。
ReadFloat - 读取浮点值。
ReadInteger:读取一个整数值。
ReadDate:读取一个日期值
对于每种数据类型,依此类推。
现在如果我们要求读取一个不存在的密钥会发生什么?为此,所有读取方法都有一个默认值,如果键不存在,则可以使用该默认值。
例如,ReadString 声明为:
function ReadString(const Section, Ident, Default: String): String; override;
Nombre := ReadString('DatosPersonales','nombre','sin datos');
如何写入 .ini 文件
TIniFile 有一个 write 方法对应每个 read 方法。对于每种数据类型,它们是 WriteString、WriteBool、WriteInteger 等。
例如,如果我们想在每次关闭表单时保存它的位置,我们将在onClose事件中放置以下代码:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Config: TIniFile;
begin
Config := TIniFile.Create(ExtractFilePath(ParamStr(0))+'config.ini'));
try
with Config do
begin
WriteInteger('Pposicion','Top', Top) ;
WriteInteger('Pposicion','Left', Left) ;
WriteInteger('Pposicion','Width', Width) ;
WriteInteger('Pposicion','Height', Height) ;
end;
finally
Config.Free;
end;
end;
INI 文件的限制和缺点
TIniFile 类使用 Windows API,因此它对 INI 文件施加了 64 Kb 的限制。如果需要存储超过 64 KB 的数据,则必须使用 TMemIniFile。
如果节大于 8Kb,则可能会出现另一个问题。解决该问题的一种方法是编写自己的 ReadSection 方法版本。
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.066873073577881 seconds