CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何操作ini文件呢?

楼主wolftear(望月狼)2002-04-13 09:09:41 在 Delphi / VCL组件开发及应用 提问

我想把如下格式的ini文件里的信息读取到comboBox里面,该如何循环呢?而且用eof(iniFile)时提示类型不对  
   
  [address]  
  addr1=192.168.0.1  
  addr2=192.168.0.2  
  addr3=192.168.0.3 问题点数:50、回复次数:10Top

1 楼anggogo(angGoGo)回复于 2002-04-13 09:18:10 得分 0

那你就做一个记录的COUNT字段在INI里啊Top

2 楼simonvc(约书亚)回复于 2002-04-13 09:20:13 得分 0

GetPrivateProFileInt  
  GetPrivateProFileSection  
  GetPrivateProFileSectionNames  
  GetPrivateProFileString  
  GetPrivateProFileStruct  
  WritePrivateProFileSection  
  WritePrivateProFileString  
  WritePrivateProFileStructTop

3 楼fxjpost(天外面還是天)回复于 2002-04-13 09:20:43 得分 0

看看delphi5編程指南吧Top

4 楼simonvc(约书亚)回复于 2002-04-13 09:20:56 得分 0

API函数:  
  GetPrivateProFileInt  
  GetPrivateProFileSection  
  GetPrivateProFileSectionNames  
  GetPrivateProFileString  
  GetPrivateProFileStruct  
  WritePrivateProFileSection  
  WritePrivateProFileString  
  WritePrivateProFileStruct  
  Top

5 楼CheerDesiger(随意)回复于 2002-04-13 09:29:02 得分 15

請看看如下方法對你有沒有幫助﹐我按照你的要求做的﹐見笑。  
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      fIni   :   TIniFile;  
      rndI   :   Integer;  
      strTmp   :   String;  
      strFile:   String;  
      strHead:   String;  
      strSec   :   String;  
  begin  
   
      strFile   :=   ExtractFilePath(Application.ExeName);  
      strFile   :=   strFile   +   'myFile.ini';  
      strHead   :=   'addr';  
      strSec     :=   'address';  
      rndI         :=   1;  
   
      fini   :=   TIniFile.Create(strFile);  
   
      if   fIni   <>   nil   then  
      begin  
              while   rndI>=0   do  
              begin  
                    strTmp   :=   strHead   +   IntToStr(rndI);  
                    if   fIni.ValueExists(strSec,strTmp)   then  
                    begin  
                            strTmp   :=   fIni.ReadString(strSec,strHead   +   IntToStr(rndI),'');  
                            ComboBox1.Items.Add(strTmp);  
                            rndI   :=   rndI   +   1;  
                    end  
                    else  
                          rndI   :=   -1;  
              end;  
   
      end;  
   
   
  end;Top

6 楼zsy_good(只要坚定不移的走下去,那一定会成功)回复于 2002-04-13 09:31:31 得分 0

delphi   里面有Tinifile类  
  用这个类可以实现对ini文件的操作  
  Tinifile.ReadString();可以读一个自负  
  Tinifile.writestring();可以写一个字符  
  Tinifile.readinteger();这个总知道了把  
  Top

7 楼eulb(执子之手,与子偕老)回复于 2002-04-13 09:32:24 得分 10

这是API方法  
   
  要利用.INI文件做程序有关数据的存储工作,就需要能读和写.INI文件,所以列了如下方法给大家参考:  
  从.INI文件中获取字符串  
  var  
  strResult:pchar;  
  begin  
  GetPrivateProfileString(  
  'windows',   //   []中标题的名字  
  'NullPort',   //   =号前的名字  
  'NIL',   //   如果没有找到字符串时,返回的默认值  
  strResult,   //存放取得字符  
  100,   //取得字符的允许最大长度  
  'c:\forwin95\win.ini'   //   调用的文件名  
  );  
  edit1.text:=strResult;   //显示取得字符串  
  从.INI文件中获取整数  
  edit1.text:=inttostr(GetPrivateProfileInt(  
  'intl',   //   []中标题的名字  
  'iCountry',   //   =号前的名字  
  0,//   如果没有找到整数时,返回的默认值  
   
  'c:\forwin95\win.ini'   //   调用的文件名  
  ));  
  向.INI文件写入字符串  
  WritePrivateProfileString(  
  'windows',   //   []中标题的名字  
  'load',   //   要写入“=”号前的字符串  
  'accca',   //要写入的数据  
  'c:\forwin95\win.ini'   //   调用的文件名  
  );  
  向.INI文件写入整数  
  WritePrivateProfileSection(  
  'windows',   //   []中标题的名字  
  'read=100',   //   要写入的数据  
  'c:\forwin95\win.ini'   //   调用的文件名  
  );  
  Top

8 楼eulb(执子之手,与子偕老)回复于 2002-04-13 09:36:41 得分 15

这是TiniFile类方法  
   
  在Windows中的应用程序极大多数拥有自己的初始化文件,如PowerBuilder、Office及Cstar等。因此初始化文件的读写是每个高级程序员必须掌握的技术。虽然初始化文件的读写也可用Object   Pascal中的文本文件一样读写,但因初始化文件不同于一般的文本文件,它有自己固定的格式(见下面的初始化文件是ucdos中提供的rdfnt.ini文件),如果用文本文件的方式读写,不仅格式转换十分繁琐,且很容易出现错误,为了方便程序员读写初始化文件中的数据,Delphi中向用户提供了一个TIniFile类,通过TiniFile类就可十分方便地读写初始化文件。  
   
  Ucdos中rdfnt.ini文件的内容为:  
   
  [True   Type   fonts   directory]  
   
  Dir=C:\WINDOWS\SYSTEM  
   
     
   
  [True   Type   fonts   list]  
   
  ARIAL.TTF=64  
   
  ARIALBD.TTF=65  
   
  ARIALI.TTF=66  
   
  ARIALBI.TTF=67  
   
  TIMES.TTF=68  
   
  TIMESBD.TTF=69  
   
  TIMESI.TTF=70  
   
  TIMESBI.TTF=71  
   
  COUR.TTF=72  
   
  COURBD.TTF=73  
   
  COURI.TTF=74  
   
  COURBI.TTF=75  
   
     
   
  [Use   All   True   Type   fonts]  
   
  All=0  
   
     
   
  TiniFile类不是一个Delphi的部件,因此不能在Delphi的VCL模板中找到,它在Delphi   系统中的inifiles单元中定义,因此要使用TiniFile类,必须在使用该类的单元文件中用Uses   inifiles指令明确地说明。  
   
  TiniFile类中定义了许多成员函数,这里介绍几个使用频率较高的成员函数:  
   
      ⑴   Create()  
   
      函数定义为:   constructor   Create(const   FileName:   string);  
   
  该函数建立TiniFile类的对象。参数FileName是要读写的初始化文件名。  
   
  若读写的文件在Windows的目录里(如system.ini文件),则可以直接写文件名而不必指定路径,否则就必须指定路径(如d:\ucdos\rdfnt.ini)。  
   
  如按以下规则在规定的目录中存在该文件,则打开该初始化文件;否则在规定的目录里创建该初始化文件。  
   
      ⑵   ReadSections()  
   
      过程定义为:   procedure   ReadSections(Strings:   TStrings);  
   
  该过程将从所建立的TiniFile类的对象(即与之关联的初始化文件)中读取所有的节点名(即用[]括号括起的那部分,如rdfnt.ini文件中的[True   Type   fonts   list])存入字符串列表中。参数Strings即为字符串列表的变量名。  
   
      ⑶   ReadSectionValues()  
   
      过程定义为:   procedure   ReadSectionValues(const   Section:   string;   Strings:   TStrings);  
   
      该过程将参数Section的值所对应的节点(如rdfnt.ini文件中的[True   Type   fonts   list])中的各个关键字(如ARIALBI.TTF)及其所含的值(如ARIALBI.TTF关键字值为67)读入参数Strings指明的字符串列表中。  
   
      ⑷   ReadSection()  
   
  过程定义为:   procedure   ReadSection(const   Section:   string;   Strings:   TStrings);  
   
  该过程将参数Section的值所对应的节点中的各个关键字读入参数Strings指明的字符串列表中。与ReadSectionValues()不同的是它没有读取各个关键字的对应值。  
   
      ⑸   ReadString()  
   
      函数定义为:   function   ReadString(const   Section,   Ident,   Default:   string):   string;  
   
  该函数返回以参数Section的值为节点名、参数Ident的值为关键字名所对应的关键字值(如[True   Type   fonts   list]节中ARIALBI.TTF关键字的值为67)。当指定的节点或节内的关键字不存在时,则函数返回参数Default的缺省值。返回的值是一个字符串型数据。  
   
  当指定节点中关键字值的数据类型不是字符串时,则可用ReadInteger()成员函数读取一个整型值,用ReadBool()成员函数读取一个布尔值。  
   
      ⑹   WriteString()  
   
  过程定义为:   procedure   WriteString(const   Section,   Ident,   Value:   string);  
   
  该过程将参数Section的值为节点名、参数Ident的值为关键字名的关键字值设置为参数Value的值。该过程设置的是字符串型数据。  
   
  当指定节点和关键字均存在时,则用Value的值替代原值;如指定节点不存在,则在关联的初始化文件中自动增加一个节点,该节点的值为参数Section的值,并在该节点下自动增加一个关键字,关键字名为参数Ident的值,该关键字对应的值为参数Value的值;若节点存在,但关键字不存在,则在该节点下自动增加一个关键字,关键字名为参数Ident的值,该关键字对应的值为参数Value的值。  
   
  若要设置整型值,可调用WriteInteger()成员函数;用WriteBool()成员函数设置布尔值。  
   
  知道了以上函数的作用,要建立或读写一个初始化文件就不难了。下面以一个实际例子说明初始化文件的读取方法,步骤如下:  
   
     
   
  ⒈   在需要读写初始化文件的窗体(Form)上放置名为SectionComboBox、IdentComboBox的两个组合式列表框,其中SectionComboBox存放节点名,IdentComboBox存放所选择节点的关键字名。一个名为IdentValueEdit的输入框,存放对应关键字的值。名为CmdChang的修改命令钮可以用来修改关键字的值,修改后用名为CmdSave的存储命令钮将修改后的关键字的值存入关联的初始化文件。窗体对应的单元名设为IniUnit,窗体名设为IniForm,窗体布局如下图一所示:  
   
     
   
   
   
  ⒉   在IniUnit单元的interface部分用uses   inifiles;说明要引用的TiniFile类所定义的单元名。并在变量说明部分定义TiniFile类的对象,如  
   
  var   IniFile:   TiniFile;  
   
  ⒊   建立窗体的OnCreate事件过程。使用TIniFile类的Create成员函数创建TIniFile对象,用该对象读写d:\ucdos目录中的rdfnt.ini初始化文件,并将该初始化文件中的所有节点通过ReadSections()   成员函数读入SectionComboBox组合式列表框中,用ReadSection()成员函数将第一个节点中的所有关键字读入IdentComboBox   组合式列表框,用ReadString()成员函数将第一个关键字的值送入IdentValueEdit输入框。  
   
  ⒋   建立SectionComboBox组合式列表框的OnChange事件过程。当该选择列表框中的不同项目(即不同的节点名)时,用ReadSection()成员函数将选节点中的所有关键字读入IdentComboBox   组合式列表框,并用ReadString()成员函数将第一个关键字的值送入IdentValueEdit输入框。  
   
  ⒌   建立IdentComboBox组合式列表框的OnChange事件过程。当该选择列表框中的不同项目(即不同的关键字名)时,用ReadString()成员函数将该关键字的值送入IdentValueEdit输入框。  
   
  ⒍   建立命令钮CmdChang的OnClick事件过程。使IdentValueEdit输入框中的内容可以修改(不按该命令钮,IdentValueEdit输入框是不能修改的),并设置命令钮CmdSave有效,可以将修改后的关键字值存入关联的初始化文件中。  
   
  ⒎   建立命令钮CmdSave的OnClick事件过程。如果关键字值已改变,则调用WriteString()成员函数将修改后的关键字的值存盘。  
   
  ⒏   建立窗体的OnDestroy事件过程。当窗体失效时,将建立的TIniFile对象释放,以释放该对象所战用的系统资源。  
   
  至此,运行该工程,初始化文件的读写已能顺利进行。当然还可以使用EraseSection()成员函数删除指定的节,也可用DeleteKey()成员函数删除指定的关键字,因篇幅有限,这里就不详细介绍了,有兴趣的可参考Delphi的使用帮助。  
   
  下面是该单元的源程序代码:  
  Top

9 楼eulb(执子之手,与子偕老)回复于 2002-04-13 09:45:30 得分 10

unit   IniUnit;  
   
     
   
  interface  
   
     
   
  uses  
   
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
   
      StdCtrls,   inifiles;  
   
     
   
  type  
   
      TIniForm   =   class(TForm)  
   
      SectionComboBox:   TComboBox;  
   
      Label1:   TLabel;  
   
      CmdSave:   TButton;  
   
      CmdChang:   TButton;  
   
      IdentComboBox:   TComboBox;  
   
      IdentValueEdit:   TEdit;  
   
      Label2:   TLabel;  
   
      Label3:   TLabel;  
   
      procedure   FormCreate(Sender:   TObject);  
   
      procedure   SectionComboBoxChange(Sender:   TObject);  
   
      procedure   FormDestroy(Sender:   TObject);  
   
      procedure   CmdChangClick(Sender:   TObject);  
   
      procedure   CmdSaveClick(Sender:   TObject);  
   
      procedure   IdentComboBoxChange(Sender:   TObject);  
   
      private  
   
      {   Private   declarations   }  
   
      public  
   
      {   Public   declarations   }  
   
      end;  
   
     
   
  var  
   
      IniForm:   TIniForm;  
   
  {   Delphi中通过TIniFile类读写Windows的初始化文件   }  
   
      IniFile:   TIniFile;  
   
     
   
  implementation  
   
     
   
  {$R   *.DFM}  
   
     
   
  procedure   TIniForm.FormCreate(Sender:   TObject);  
   
  begin  
   
  {   使用TIniFile类的Create成员函数建立TIniFile对  
   
  象,该对象用来读写d:\ucdos目录中的rdfnt.ini文件,  
   
  如果读写的文件在Windows的目录里(如system.ini),  
   
  则可以直接写文件名而不必指定路径   }  
   
      IniFile:=TIniFile.Create('d:\ucdos\rdfnt.ini');  
   
  {   将TIniFile对象关联的初始化文件system.ini中的所  
   
  有节(即用[]括号括起的那部分)的节名送入下拉式组  
   
  合列表框SectionComboBox中   }  
   
      SectionComboBox.Clear;  
   
      IniFile.ReadSections(SectionComboBox.Items);  
   
  {   选择system.ini文件的第一个节名   }  
   
      SectionComboBox.ItemIndex:=0;  
   
      SectionComboBoxChange(Sender);  
   
      CmdSave.Enabled:=False;  
   
  end;  
   
     
   
  {   将组合列表框IniComboBox中所选择节中对应的各个  
   
  变量及对应的值送入多行文本编辑器IniMemo中   }  
   
  procedure   TIniForm.SectionComboBoxChange(Sender:   TObject);  
   
  begin  
   
      IdentComboBox.Clear;  
   
      IniFile.ReadSection(SectionComboBox.Text,  
   
      IdentComboBox.Items);  
   
      IdentComboBox.ItemIndex:=0;  
   
      IdentComboBoxChange(Sender);  
   
  end;  
   
     
   
  procedure   TIniForm.IdentComboBoxChange(Sender:   TObject);  
   
  begin  
   
      IdentValueEdit.Enabled:=False;  
   
      {   将选择的关键字值读入   }  
   
      IdentValueEdit.Text:=  
   
      IniFile.ReadString(SectionComboBox.Text,  
   
      IdentComboBox.Text,'');  
   
  end;  
   
     
   
  procedure   TIniForm.CmdChangClick(Sender:   TObject);  
   
  begin  
   
      CmdSave.Enabled:=True;  
   
      IdentValueEdit.Enabled:=True;  
   
      IdentValueEdit.SetFocus;  
   
  end;  
   
     
   
  procedure   TIniForm.CmdSaveClick(Sender:   TObject);  
   
  begin  
   
      if   IdentValueEdit.Modified   then   begin  
   
      IniFile.WriteString(SectionComboBox.Text,  
   
      IdentComboBox.Text,  
   
      IdentValueEdit.Text);  
   
      end;  
   
      IdentValueEdit.Enabled:=False;  
   
      CmdSave.Enabled:=False;  
   
  end;  
   
     
   
  procedure   TIniForm.FormDestroy(Sender:   TObject);  
   
  begin  
   
      IniFile.Free;   {   释放创建的对象   }  
   
  end;  
   
     
   
  end.  
  Top

10 楼wolftear(望月狼)回复于 2002-04-13 11:03:55 得分 0

谢谢大家了!Top

相关问题

  • 如何操作ini文件,在vc中。
  • 如何生成ini文件,并操作??
  • ini文件操作
  • 怎样操作ini文件
  • 操作ini文件出错
  • 有谁知道如何操作INI文件?
  • 如何对INI文件进行读和写操作?
  • VC如何操作.ini配置文件?是哪个类?
  • (高分紧急求救!)如何用VB操作INI文件?
  • (高分紧急求救!)如何用VB操作INI文件?

关键词

  • win95
  • 函数
  • 文件
  • 节点
  • 文件名
  • 关键字
  • 初始化
  • tinifile
  • 字符串
  • 值

得分解答快速导航

  • 帖主:wolftear
  • CheerDesiger
  • eulb
  • eulb
  • eulb

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo