谁能介绍一下*.ini文件的操做(50分)

  • 主题发起人 主题发起人 fff-1
  • 开始时间 开始时间
F

fff-1

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能介绍一下*.ini文件的操做
包含(如何定义文件,读文件,写文件,删除文件内容,
修改文件内容.......)越详细越好;
谢谢;
 
去看 TIniFile 的帮助:例子很多。
 
使用INI文件

1.创建INI文件
unit ini1
<<===这里不可用INI
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,
Inifiles
//<===添加
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo1: TMemo;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
INI:Tinifile
//<------添加

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
ini:=Tinifile.create('e:/delphi.ini');
ini.writebool('Options','Sound',True);
ini.writebool('Options','VIdeo',False);
ini.writeInteger('Options','Level',3);
ini.WriteString ('Config','CompanyName','XXX集团公司');
Ini.Free;
end;

=========
procedure TForm2.Button1Click(Sender: TObject);
Cname:String;
begin
Cname:='';
Ini := TIniFile.Create('e:/Delphi.Ini');
Ini.ReadSectionValues('Config',memo1.Lines);
Cname:=copy(memo1.Lines[0],13,100);
form1.Caption :=Cname;
ini.Free
end;
 
再贴:
使用INI文件保存状态信息

Delphi中提供了TIniFile类,TIniFile类能够在INI文件中存取应用
程序专用信息,我们可以用它来处理INI文件。注意使用时将IniFiles
单元加入uses列表中。

使用INI文件存取应用程序专用信息是Windows 3.x中的标准方法。
INI文件中的信息储存是分段的,每个段由一个括在方括号中的名称
说明,比如WIN.INI中就包括[Desktop]等段。每个段中又由一些
键值组成,这些键值的格式是:< keyname >=< value >,共有三种
类型:字符串、整型和布尔型,每种类型有两种方法可以读
写:ReadBool,WriteBool,ReadInteger,WriteInteger,ReadString,
WriteString。下面就一个例子来说明它们的用法:

1.建立INI文件

procedure TForm1.FormCreate(Sender:Tobject)

{如INI文件不存在,建立INI文件;
否则,从INI文件中读取数据}
var
  status:integer;
inifile:TIniFile;
filename:String;
begin
filename:=extractfilepath
(application.exename)+’iniexample.ini’;
inifiel:=Tinifile.create(filename);
status:=inifile.readinteger
(‘MainForm’,’Status’,0);
if status< >0 then
//INI文件存在,读状态信息
case status of
1: begin
top:=inifiel.readinteger
(‘MainForm’,’Top’,top);
…………
end;
2: begin
top:=100;
left:=100;
end;
     3: windowstate:=wsmaximized;
end;
end;
2.保存状态
procedure TForm1.FormDestroy
(Sender:Tobject);
var
status:integer;
begin
case windowstate of
wsnormal: begin
inifile.writeinteger
(‘MainForm’, ‘Top’,top);
…………
//保存状态信息
          end;
wsminimized: status:=2;
wsmaximized: status:=3;
end;
inifile.writeinteger(‘MainForm’,
‘Status’,status);
inifile.destroy;
end;
上述程序运行之后,生成的iniexample.ini文件格式如下:
  [MainForm]
Top=60
Left=100
………
Status=1

 
c:/demo.ini 的结构:

[user]
username=demo
[class]
userclass=democlass

演示程序如下:(注意:在 users 中必须包含 IniFiles)

procedure TMainForm.DemoInfo;
var
InfoFile:TIniFile;
UserName,UserClass:string;
begin
//创建对象
InfoFile:=TIniFile.Create('c:/demo.ini');
//读字符,readstring(主键,键名,缺省值)
UserName:=InfoFile.ReadString('user','username','demo');
//写字符,writestring(主键,键名,键值)
InfoFile.WriteString('user','age','18');
//删除键,DeleteKey(主键,键名)
InfoFile.DeleteKey('class','userclass');
//删除主键,EraseSection(主键)
InfoFile.EraseSection('class');
//释放对象
InfoFile.Free;
end;

演示程序中只有字符型的读写,其它类型的是一样的,自己去想。
提醒(纯属个人经验,仅供参考):
1、其实所有类型都可以转换成字符型,这样省得麻烦。
2、ini 文件比较特别,文件的长度有限制,而且它是按行读取和写入的,即:
username=demo

username=
demo
是不同的!
 
烂泥给出了许多例子,shangcm给出了详细的用法。
这正是我想要的。

十分感谢各位。
但是又有了新的问题;
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, ExtCtrls, Buttons, CoolForm, TrMemo, Tranbtn,inifiles;

type
TForm2 = class(TForm)
StaticText1: TStaticText;
StaticText2: TStaticText;
me2: TMaskEdit;
CoolForm1: TCoolForm;
TransparentMemo1: TTransparentMemo;
MTranBtn1: TMTranBtn;
me3: TMaskEdit;
me1: TMaskEdit;
procedure MTranBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.MTranBtn1Click(Sender: TObject);
var
key:tinifile;
oldkey:string;
begin
key:=tinifile.create('c:/key.ini');
if me2.text=me3.text then
begin
oldkey:=key.readstring('key','key','key');《==
if oldkey=me1.text then
begin
key.writestring('key','key',me3.text);
key.free;
end
else
begin
showmessage('旧密码错误');
me1.clear;
end
end
else
begin
showmessage('新密码有出入');
me2.clear;
me3.clear;
end;
me1.text:=key.readstring('key','key','key');《== //检验用//
end;
end.
以下程序通过编译;
但是me1.text显示是'me1.text'为什么?
我想是不是《==出了问题?本人初学delphi有许多不懂之处
请多指教。(帮助帮道底吗);
 
我是用文本文件来代替!
 
TO fff-1:
首先,你的程序根本就通不过!

procedure TForm2.MTranBtn1Click(Sender: TObject);
var
key:tinifile;
oldkey:string;
begin
key:=tinifile.create('c:/key.ini');
if me2.text=me3.text then
begin
oldkey:=key.readstring('key','key','key');《==
if oldkey=me1.text then
begin
key.writestring('key','key',me3.text);
key.free;<font color=red>//问题2</font>
end
else
begin
showmessage('旧密码错误');
me1.clear;
end<font color=red>//问题1</font>
end
else
begin
showmessage('新密码有出入');
me2.clear;
me3.clear;
end;
me1.text:=key.readstring('key','key','key');《== //检验用//
end;
end.

其次,我发现了几个问题,如下:

问题1:这个地方你漏掉了一个<big><big><b><font color=red>;</font></b></big></big>

问题2:我认为将这句放在程序的最后较好(这样就编译运行通过了,
按照要求输出了密码)

问题3:(个人意见)
我认为你应该注意一下程序的缩进,这样对你以后查错误很有好处!
 
key.Free放到最后看看
你把它释放了,还想读到准确的东西?
 
procedure DemoINI(AFilename:string);
var iniDemo:TiniFile;
begin
iniDemo:=Tinifile.create(AFilename);
try
with iniDemo do
begin
writeinteger('主键名','键名',值);
writestring('主键名','键名',值);
……
//相应的有read……
end;
except
Application.messagebox('There is Error','Error',MB_OK);
end;
iniDemo.free;
end;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部