Delphi 中对 ini 文件操作(转)

 

 上帝之Delphi 中对 ini 文件操作

一、INI文件的结构:

;注释
[小节名]
关键字=值

  ini 文件允许有多个小节,每个小节又允许有多个关键字,"="后面是该关键字的值。
  ini 文件中可以用分号";"开头来注释一行。


二、定义 TIniFile 对象


Uses
IniFiles;

var
MyIniFile: Tinifile;

然后,就可以对变量 MyIniFile 进行创建、打开、读写、关闭等操作了。

 

三、打开INI文件
MyIniFile := TIniFile.Create('C:/MyProg/Setting.ini'); 网吧58UN
  上面这一行语句会将变量 MyIniFile 与文件 C:/MyProg/Setting.ini 建立联系,然后,就可以通过变量 MyIniFile 来读写 C:/MyProg/Setting.ini 文件中的信息了。

  如果括号中的文件名没有使用绝对路径的话,那么程序(其实是 Windows API 在操作这个文件)会在 Windows 目录中查找 Setting.ini,如果找不到,则操作失败,程序不会在其他任何地方搜索 Setting.ini 这个文件,包括程序本身所在的目录。如果你要操作非 Windows 目录中的 ini 文件,请指明文件的绝对路径。比如上面的 C:/MyProg/Setting.ini,或者用下面的方法获取程序所在目录中的 ini 文件:
var
MyIniFileName: String;
begin
MyIniFileName := ExtractFilePath(Application.ExeName) + 'Setting.ini';
MyIniFile := TIniFile.Create(MyIniFileName);
//...
end;


四、读取关键字
TIniFile 类提供的读取 ini 文件的方法:
ReadString();         //读取字符串型值
ReadBool();           //读取布尔型值
ReadInteger();        //读取整数型值
ReadFloat();          //读取浮点数型值
ReadDate();           //读取日期型值
ReadTime();           //读取时间型值
ReadDateTime();       //读取日期时间型值
ReadBinaryStream()    //读取二进制数据流



  其实 ini 文件中只能存储字符串型的数据,因为 ini 文件本身就是文本文件,里面只能存放文本内容。上面介绍的 ini 读取操作中,有读取整数型的,有读取布尔型的,有读取日期时间型的,其实都是先读取其字符串值,然后再进行类型转换得到的结果(看一下这些方法的源文件就知道了)。
  这些方法的参数基本相同,只是最后一个参数“缺省值”的类型可能不同,不同的方法用不同的缺省值类型,比如读取字符串型值,其缺省值就是字符串类型:
var
S: String;
begin
S := MyIniFile.ReadString('小节名', '关键字', '缺省值');
end;


  调用不同的方法,可以得到不同类型的值,其中缺省值为读取该关键字失败时返回的结果。
 

五、写入关键字

  TIniFile 类提供的写入 ini 文件的方法:

WriteBool();           //读取布尔型值
WriteString();         //读取字符串型值
WriteInteger();        //读取整数型值
WriteFloat();          //读取浮点数型值
WriteDate();           //读取日期型值
WriteTime();           //读取时间型值
WriteDateTime();       //读取日期时间型值
WriteBinaryStream()    //读取二进制数据流


  请参照读取方法中的介绍,这里不再多讲。当要写入的 ini 文件不存在时,这些方法会自动创建该 ini 文件。
var
S: String;
begin
S := '要写入的数据';
MyIniFile.WriteString('小节名', '关键字', S);



六、其它关键字操作
58un.com.cn 为中国网吧努力
DeleteKey('小节名','关键字');           //删除指定小节中的指定关键字
ValueExists('小节名','关键字');         //判断指定小节中的指定关键字是否存在


七、小节操作
采本站者,必打击者

  要想增加一个小节,可以用写入关键字的方法来实现,在写入关键字时,如果小节不存在,则会自动创建改小节。其他小节操作方法如下:

EraseSection('小节名');                         //删除指定的小节
SectionExists(('小节名');                       //判断一个小节是否存在
ReadSection('小节名',TStrings变量);             //读取指定小节中的所有关键字,通过 TStrings变量 返回结果
ReadSections(TStrings变量);                     //读取 ini 文件中的所有小节,通过 TStrings变量 返回结果
ReadSectionVaules('小节名',TStrings变量);       //读取指定小节中的所有行(关键字=值),通过 TStrings变量 返回结果

上面的 TStrings变量 是一个引用参数,这些方法中对该参数做的任何修改都会返回到调用函数中去。

八、释放
  当你使用完 MyIniFile,要及时释放 MyIniFile,以节约内存。你可以使用下面的结构来操作 MyIniFile:

var
MyIniFile: TIniFile;
begin
MyIniFileName := ExtractFilePath(Application.ExeName) + 'Setting.ini';
MyIniFile := TIniFile.Create(MyIniFileName);
try
    //操作 MyIniFile
finally
    MyiniFile.Free;
end;
end;

 

  Delphi 中不允许存在非法的关键字(即没有等号"="的关键字行),这样的关键字是无法用 TiniFile 类来操作的。如果你要操作这样的特殊关键字行,请使用 Windows API 直接操作,它可以绕过 Delphi 的合法性检验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一些Delphi7的例子,包含下面内容:(高手就别看了,新手可看看,也是好多年没做了,又要做个小东西,练手做的例子) 有的是本人练习做的,少数是下载别人的或修改过的,也有1个似乎是明日科技的配套代码-此处没有删除,懒得删除直接打包了。 用这些分,只是用来备用下载其他东西而用,你觉得不值得,你留言分退给你(我来也不是常来这里),我认为是值得的。 还有一些其他的清单没罗列出来 如数据库表结构找不到,根据名字找这个文件名:EquipmentSQL_20170528_ok, 如果没就是没有了,因为一个连接服务器,一个是本机上的练习数据库,如没有请见谅 大致类型: cxGrid的几个例子、ini连接数据库、明日科技配套代码(文件上传下载)、 时间差相减(可参考Delphi函数里面的综合运用)、基本控件应用 cxGrid查找功能 cxGrid的列属性 cxGrid应用交流实例一_ok eg_Add_cbbValue_IntoMemo_test_20170401 eg_Check_Checkbox_Change eg_counter eg_cxGrid_Right_2 eg_cxGrid_Right_更细权限的bit值到表 eg_cxGrid_SumRecord_1 eg_DCom_connection_20170606 eg_ImportToSQL eg_LoadRecord_Improve_Original eg_LoadRZCheckTree_1 eg_LoadRZCheckTree_连带设置_2 eg_LoadRZCheckTree_双击用户设置_del eg_LoadTree_1 eg_ReadIni_独立数据模块 eg_test_ImportExcelToSQL_ComOBJ_2 eg_update_bit_20170528 eg_报废时间月日格式只有1位时问题_20170609 eg_测试某列的条件改变另外列的Edit属性(cxGrid的例子) eg_对BoolToStr后的值进行再次换_最后循环取bit值 eg_时间差计算_2 FileMS(明日科技的配套代码,关于文件上传下载的那个) EquipmentSQL_20170528_ok(如没数据库的,在这里查表结构,有的表结构不在这里,只能参考一下了)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值