delphi 中配置文件的使用(*.ini)和TIniFile 用法
一、配置文件
.ini 文件是基于文本类型的格式文件,用于存储程序初始化和配置数据。
.ini文件是有段(Sections)和键(key)组成的,每个文件可以有 n个段(每个段有方括号括起来),每个段可以有m个键,大致格式如下:
[secontion]
KeyName1=Value1;
;comment
KeyName2=Value2;
段名和键名在使用中是不区分大小写得,但是名字中不能有空格。
键可以存储integer,string,float,boolean,datatime等数据类型。
如我写的服务配置文件连接数据库的例子:
[Oralce]
con_scyx=Provider=MSDAORA.1;Password=ygscyx;User ID=scyx;Data Source=ygdbsrv;Persist Security Info=True
con_erp=Provider=MSDAORA.1;Password=ERP;User ID=ERP;Data Source=ORCL;Persist Security Info=True
二、读取配置文件
在Delphi中有一个TIniFile的类用于访问.ini文件,该类定义在IniFiles.pas文件中,具体使用如下
1、在Interface的Uses节增加IniFiles;
2、在Var变量定义部分增加一行:myinifile:Tinifile;
然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了。
二、打开INI文件
Filename:=ExtractFilePath(Paramstr(0))+'program.ini';
myinifile:=Tinifile.Create(filename);
该语句将会为变量myinifile与具体的文件program.ini建立联系,然后,就可以通过变量myinifile,来读写program.ini文件中的关键字的值了。如果括号中的文件名没有指明路径的话,那么这个Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应用程序当前目录中的方法是:为其指定完整的路径及文件名。
三、读取关键字的值
针对INI文件支持的字符串、整型数值、布尔值三种数据类型,TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。假设已定义变量vs、vi、vb分别为string、integer、boolean类型。其中缺省值为该INI文件不存在该关键字时返回的缺省值。
vs:=myinifile.Readstring('小节名','关键字',缺省值);
vi:=myinifile.Readinteger('小节名','关键字',缺省值);
vb:=myinifile.Readbool('小节名','关键字',缺省值);
四、写入INI文件
同样的,TInifile类也提供了三种不同的对象方法,向INI文件写入字符串、整型数及布尔类型的关键字。
myinifile.writestring('小节名','关键字',变量或字符串值);
myinifile.writeinteger('小节名','关键字',变量或整型数值);
myinifile.writebool('小节名','关键字',变量或True或False);
当这个INI文件不存在时,上面的语句还会自动创建该INI文件。
五、删除关键字
除了可用写入方法增加一个关键字,Tinifile类还提供了一个删除关键字的对象方法:
myinifile.DeleteKey('小节名','关键字');
六、小节操作
增加一个小节可用写入的方法来完成
myinifile.EraseSection('小节名'); // 删除一个小节
myinifile.readsection('小节名',TStrings变量); 将小节中的所有关键字名读取至一个字符串列表变量中;myinifile.readsections(TStrings变量); 将INI文件中所有小节名读取至一个字符串列表变量中去。
myinifile.readsectionvalues('小节名',TStrings变量); 将小节的键值对读取至一个字符串列表变量中去。
七、释放
myinifile.Destroy; 也可以使用FreeAndNil(myinifile);
我写的读取配置文件数据库的例子
procedure TDBMonitorService.ServiceCreate(Sender: TObject);
var
pFile: array[0..255] of char;
begin
try
GetModuleFileName(0,pFile,Sizeof(pFile));//获取路径
g_Path := ExtractFileDir(pFile); //获得服务的路径 从文件名中获取目录名(文件不在根目录下时取得的值后没有“/”,在根目录时一样,都是盘符,例如“C:/”)
with tinifile.Create(g_path+'\config.ini') do
try
ConScyx := ReadString('Oralce','con_scyx','');
ConErp := ReadString('Oralce','con_erp','');
finally
Free;
end;
con_scyx:=TADOConnection.Create(nil);
con_scyx.ConnectionString:=ConScyx;
con_scyx.LoginPrompt:=false;
con_erp:=TADOConnection.Create(nil);
con_erp.ConnectionString:=ConErp;
con_erp.LoginPrompt:=false;
qry_scyx:=TADOQuery.Create(nil);
qry_scyx.Connection:=con_scyx;
qry_erp:=TADOQuery.Create(nil);
qry_erp.Connection:=con_erp;
except
on e:Exception do
begin
WriteLog(e.Message+'->服务启动错误!');
Exit;
end;
end;
end;
delphi 中配置文件的使用(*.ini)和TIniFile 用法的更多相关文章
- Delphi 中 FindWindow 和 FindWindowEx 的语法和用法
FindWindow(lpClassName, {窗口的类名}lpWindowName: PChar {窗口的标题}): HWND; {返回窗口的句柄; 失败返 ...
- Delphi 中的全局快捷键+给指定窗体发送按键
[背景] 公司做视频影像采集,平时采集图像的时候都需要打开采集窗口,然后需要开着采集窗口来进行图像采集.同事问我能不能做一个全局快捷键,哪怕我没有操作也可以采集图像.说干就干,一直想做全局快捷键了,网 ...
- [php-src]理解Php内核中的函数与INI
内容均以php-5.6.14为例. 一. 函数结构 内核中定义一个php函数使用 PHP_FUNCTION 宏 包装,扩展也不例外,该宏在 ./main/php.h:343 有着一系列类似以 PHP ...
- delphi中单独编译pas生成dcu文件
delphi中单独编译pas生成dcu文件 在网上下载了一个带源码的组件,结果碰到提示说缺少xxx.dcu.一看它的目录下确实没有,那能不能生成一个呢? 当然可以! 方法是使用delphi的安装目录\ ...
- python中configparser模块读取ini文件
python中configparser模块读取ini文件 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(se ...
- 配置文件yaml和ini
前言 本文主要介绍配置文件yaml和ini的读取. 一.yaml文件 YAML是一个可读性高,易于理解,用来表达数据序列化的格式.语法与python的语法类似.文件后缀 .yaml 下面是yaml文 ...
- Delphi中stringlist分割字符串的用法
Delphi中stringlist分割字符串的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaT ...
- delphi中exit,abort,break,continue 的区别
from:http://www.cnblogs.com/taofengli288/archive/2011/09/05/2167553.html delphi中表示跳出的有break,continue ...
- Delphi中使用比较少的一些语法
本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类 ...
随机推荐
- Spring 配置中的 ${}
Spring 配置中的 ${} <!-- ============ GENERAL DEFINITIONS========== --> <!-- Configurer tha ...
- 将python对象序列化成php能读取的格式(即能反序列化到对象)
转载自:http://my.oschina.net/zuoan001/blog/94914 代码如下: #coding:utf-8 # vim: encoding=utf-8:ft=python:et ...
- C# DateTime的11种构造函数
别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Globalization; using Syste ...
- 深入研究mysql中group by与order by取分类最新时间内容
鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用 ContentProvider时可以使用子查询),主要方法是用SQL ...
- Linux 性能监控 —— Load Average
一. 简单介绍 top. uptime. cat /proc/loadavg 命令中 Load average: 4.90, 5.51, 5.77 整体含义: 正在执行的任务数量 + 排 ...
- stm32 IDR寄存器软件仿真的BUG
/* * 函数名:Key_GPIO_Config * 描述 :配置按键用到的I/O口 * 输入 :无 * 输出 :无 */ void Key_GPIO_Config(void) { GPIO_Init ...
- windows操作系统记事本保存操作时间、字符映射表的打开、步骤记录器使用
记事本自动记录修改时间 你有用记事本记账或写日记的习惯吗?其实在记事本的文档开头输入".LOG"(无引号,字母为大写),之后记录内容并保存,这样以后打开就会看到之前每次修改的时间了 ...
- Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...
- FPGA开发要懂得使用硬件分析仪调试——ILA
0. ILA概述在FPGA开发中,当我们写完代码,进行仿真,确定设计没有问题后,下载到硬件上一般都能按照我们的设计意愿执行相应功能.但这也并非绝对的,有时候你会遇到一些突然情况,比如时序问题或者仿真时 ...
- 红茶一杯话Binder(传输机制篇_上)
红茶一杯话Binder (传输机制篇_上) 侯 亮 1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗 ...