.ini文件是Windows下的配置文件,使用.ini文件我们可以很方便的把一个软件的配置信息等保存在.ini文件中。
Delphi提供了一个TInifile类,使我们可以非常灵活的处理ini文件。
一.ini文件的结构
[小节名] 关键字1=值1 关键子2=值2
ini文件允许有多个小节,每个小节又允许有多个关键字,"="后面是该关键字的值。分号 ";" 开头在ini文件中表示注释。
值的类型常用的有三种,还支持浮点、日期等类型:
1. 字符串(其中字符串存贮在ini文件中时没有引号。)
2. 整型数值
3. 布尔值(布尔真值用1表示,布尔假值用0表示。)
ini文件结构如下图所示:

二、相关方法
1. 读方法
myInifile.Readstring(小节名, 关键字, 变量或字符串值); // 读字符串 myInifile.ReadInteger(小节名, 关键字, 变量或整型数值); // 读整数 myInifile.ReadBool(小节名, 关键字, 变量或True或False); // 读布尔类型
2. 写方法
myInifile.WriteString(小节名, 关键字, 变量或字符串值); myinifile.WriteInteger(小节名, 关键字, 变量或整型数值); myinifile.WriteBool(小节名, 关键字, 变量或True或False);
注1:当这个ini文件不存在时,上面的语句还会自动创建该ini文件
注2:要添加一个小节,也是使用写方法完成。
注3:如果要对一个关键字的值进行修改,同样使用上面的写方法。
3. 删除关键字方法
myInifile.DeleteKey(小节名, 关键字);
4. 操作小节的方法
myInifile.SectionExists(小节名); // 判断指定的小节是否存在 myInifile.ReadSections(TStrings变量); // 将ini文件中所有小节名读取至一个字符串列表变量中去。 myInifile.ReadSection(小节名, TStrings变量); // 可将指定小节中的所有关键字名读取至一个字符串列表变量中。 myInifile.ReadSectionValues(小节名, TStrings变量); // 可将ini文件中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变量中去。 myInifile.EraseSection(小节名); // 删除一个小节。
如何增加一个小节?
增加一个小节可用写入的方法来完成;也就是说增加小节就必须得添加默认 关键字 和 值。如:
myInifile.WriteString('郴维网', '网址', 'http://www.1118pc.com'); // 这样就添加了一个 '郴维网' 的小节。
5. 最后记得要释放资源
myInifile.Free;
三、Delphi中ini文件的使用
1. 首先在uses中添加IniFiles
2. 在var变量定义 myInifile: TIniFile;
3. 定义类的一个实例。然后就可以对变量myInifile进行创建、打开、读取、写入等操作了。
代码:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.IniFiles, Vcl.StdCtrls; // 1. uses 加入IniFiles
type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
filePath: string;
myInifile: TIniFile; // 2. 定义变量
begin
// 指定ini文件所在路径。(ExtractFilePath(Paramstr(0))表示当前程序所在路径)
filePath := ExtractFilePath(Paramstr(0)) + 'test.ini';
// 3. 创建实例与ini文件关联
myInifile := TIniFile.Create(filePath);
// 使用try finally保证TIniFile资源的释放。
try
// 4. 读写操作
finally
// 5. 最后一定要释放资源
myInifile.Free;
end;
end;
end.
四:TMemIniFile类
该类的功能和TIniFile使用一模一样,它会事先把ini文件的内容加载进内存。
比如要经常对一个ini进行读写使用TIniFile来操作是非常慢的(因为它是直接对硬盘中的文件进行操作);这时可以使用TMemIniFile类来操作,把所有的操作在内存中处理完,然后一次性把数据写入到ini文件中。
注:如果写全新内容,必须先删除原文件。如:if FileExists(idxPath) then TFile.Delete(idxPath);
特有方法:
UpdateFile方法
procedure UpdateFile; override;
{
将缓冲的INI文件数据保存到磁盘
}
GetStrings方法
procedure GetStrings(const List: TStrings);
{
功能:
将当前存储在内存中的INI文件数据复制到预先存在的字符串列表中。
参数:
List 字符串列表
}
SetStrings方法
procedure SetStrings(const List: TStrings);
{
功能:
List字符串列表的内容填充内存缓冲区。
参数:
List 字符串列表
}
Rename方法
procedure Rename(const FileName: string; Reload: Boolean);
{
功能:
将TMemIniFile与不同的INI文件相关联。
调用Rename将TMemIniFile对象使用的INI文件更改为创建对象时指定的文件以外的文件。
参数:
FileName 新INI文件的名称。
Reload 是否立即从FileName中指定的INI文件将数据加载到内存中。
True:使用指定文件中的数据重新填充TMemIniFile对象。
False:内存中的数据保持不变。
}
示例:
procedure TForm1.btn1Click(Sender: TObject);
var
path: string;
ini: TMemIniFile;
i: Integer;
begin
path := 'D:\Users\Administrator\Desktop\ttt.ini';
ini := TMemIniFile.Create(path);
try
for i := 0 to 1000000 do
begin
ini.WriteString('Test', 'Test' + i.ToString, i.ToString);
end;
ini.UpdateFile; // TMemIniFile 是内存操作, 调用UpdateFile方法才能保存到文件
finally
ini.Free;
end;
end;
相关示例代码
1. 建立如下图所示的ini文件,然后读取关键字和值到memo控件中。

// 写入 test.ini
procedure TForm1.btn1Click(Sender: TObject);
var
filePath: string;
myInifile: TIniFile;
begin
filePath := ExtractFilePath(Paramstr(0)) + 'test.ini';
myInifile := TIniFile.Create(filePath);
try
myInifile.WriteString('郴维网', '网址', 'http://www.1118pc.com');
myInifile.WriteInteger('郴维网', '整形', 888);
myInifile.WriteBool('郴维网', '布尔', True);
myInifile.WriteFloat('郴维网', '浮点型', 3.14);
// 日期型必须是一个 TDate 或 TDateTime 对象, VarToDateTime把字符串转换成日期时间对象
myInifile.WriteDate('郴维网', '日期', VarToDateTime('2020/9/28'));
myInifile.WriteDateTime('郴维网', '日期时间', Now); // Now获取当前日期时间
finally
myInifile.Free;
end;
end;
// 读取关键字和值(直接使用ReadSectionValues可以完成)
procedure TForm1.btn2Click(Sender: TObject);
var
filePath: string;
myInifile: TIniFile;
begin
filePath := ExtractFilePath(Paramstr(0)) + 'test.ini';
myInifile := TIniFile.Create(filePath);
try
myInifile.ReadSectionValues('郴维网', mmo1.Lines); // memo控件的Lines便是TStrings对象
finally
myInifile.Free;
end;
end;





