Delphi与C++Builder中INI配置文件的读写操作
概述
在Delphi和C++Builder开发环境中,常使用TIniFile类来处理INI格式的配置文件。这类文件用于存储应用程序的设置信息,结构上由多个节(section)组成,每个节包含若干键值对。通过调用VCL提供的IniFiles单元,开发者可以方便地实现配置数据的持久化管理。
引入必要的单元
首先,在接口部分的uses子句中添加IniFiles,以启用对INI文件的操作支持:
uses
..., IniFiles;
声明与创建实例
在变量区声明一个TIniFile类型的变量:
var
ConfigFile: TIniFile;
随后通过Create构造函数绑定具体文件路径:
ConfigFile := TIniFile.Create('config.ini');
若未指定完整路径,系统将默认在Windows系统目录下查找或创建该文件。为确保配置文件位于程序所在目录,应显式拼接执行路径:
var
FilePath: string;
...
FilePath := ExtractFilePath(ParamStr(0)) + 'config.ini';
ConfigFile := TIniFile.Create(FilePath);
读取配置项
TIniFile提供针对不同数据类型的读取方法,均接受三个参数:节名、键名和默认返回值(当键不存在时)。示例如下:
- 读取字符串:
StringValue := ConfigFile.ReadString('Settings', 'UserName', 'DefaultUser');
IntValue := ConfigFile.ReadInteger('Settings', 'Timeout', 30);
BoolValue := ConfigFile.ReadBool('Settings', 'AutoSave', True);
写入配置项
对应地,写入操作也分为三种方法,自动创建文件及节结构(如不存在):
ConfigFile.WriteString('Settings', 'UserName', 'Alice');
ConfigFile.WriteInteger('Settings', 'Timeout', 60);
ConfigFile.WriteBool('Settings', 'AutoSave', False);
删除键或节
可单独移除某个键值对:
ConfigFile.DeleteKey('Settings', 'UnusedKey');
也可清空整个节的所有内容:
ConfigFile.EraseSection('OldSection');
枚举节与键
利用以下方法可获取配置结构中的元信息:
- 列出某节下的所有键名:
ConfigFile.ReadSection('Settings', KeyList); // KeyList: TStrings
ConfigFile.ReadSections(SectionList); // SectionList: TStrings
ConfigFile.ReadSectionValues('Settings', ValueLines);
资源释放
使用完毕后必须及时释放对象,避免内存泄漏。推荐使用try...finally结构保障释放逻辑执行:
ConfigFile := TIniFile.Create(FilePath);
try
// 执行读写操作
finally
ConfigFile.Free; // 替代Distory,正确方法为Free
end;
综合示例
以下代码演示从界面控件读取数据并保存至INI文件的过程:
var
Ini: TIniFile;
Path: string;
Name: string;
Age: Integer;
IsActive: Boolean;
begin
Path := ExtractFilePath(ParamStr(0)) + 'app.ini';
Ini := TIniFile.Create(Path);
try
// 写入数据
Name := edtName.Text;
Age := StrToIntDef(edtAge.Text, 18);
IsActive := chkActive.Checked;
Ini.WriteString('User', 'Name', Name);
Ini.WriteInteger('User', 'Age', Age);
Ini.WriteBool('User', 'Active', IsActive);
ShowMessage('配置已保存!');
finally
Ini.Free;
end;
end;
读取过程类似:
begin
Path := ExtractFilePath(ParamStr(0)) + 'app.ini';
Ini := TIniFile.Create(Path);
try
edtName.Text := Ini.ReadString('User', 'Name', '');
edtAge.Text := IntToStr(Ini.ReadInteger('User', 'Age', 18));
chkActive.Checked := Ini.ReadBool('User', 'Active', True);
finally
Ini.Free;
end;
end;