欢迎光临
我们一直在努力

VB如何使用INI文件-.NET教程,VB.Net语言

建站超值云服务器,限时71元/月

为了方便用户使用和使系统具有灵活性,大多数win-dows应用程序将用户所做的选择以及各种变化的系统信息记录在初始化(ini)文件中。因此,当系统的环境发生变化时,可以直接修改ini文件,而无需修改程序。由此可见,ini文件对系统功能是至关重要的。本文将介绍采用visualbasicforwindows(下称vb)开发windows应用程序时如何读写ini文件。 
  ini文件是文本文件,由若干部分(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,每个关键词会控制应用程序某个功能的工作方式,等号右边的值(value)指定关键词的操作方式。其一般形式如下:

  [section1]
  keyword1=valuel
  keyword2=value2
   ……
  [section2]
  keyword1=value1
  keyword2=value2
   ……

  其中,如果等号右边无任何内容(即value为空),那就表示windows应用程序已为该关键词指定了缺省值,如果在整个文件中找不到某个关键词(或整个一部分),那同样表示为它们指定了缺省值。各个部分所出现的顺序是无关紧要的,在每一个部分里,各个关键词的顺序同样也无关紧要。

  读写ini文件通常有两种方式:一是在windows中用“记事本”(notepad)对其进行编辑,比较简单,无需赘述;二是由windows应用程序读写ini文件,通常是应用程序运行时读取ini文件中的信息,退出应用程序时保存用户对运行环境的某些修改。

  关键词的值的类型多为字符串或整数型,应分两种情况读写。为了使程序具有可维护性和可移植性,最好把对ini文件的读写封装在一个模块(rwini.bas)中,在rwi-ni.bas中构造getinis和getinin函数以及setinis和se-tinin过程,在这些函数和过程中需要使用windowsapi的“getprivateprofilestring”、“getprivateprofileint”和“writeprivateprofilestring”函数。

  rwini.bas模块的程序代码如下:

  在general-declearation部分中声明使用到的windowsapi函数:

public declare function getprivateprofilestring lib“kernel”(byval lpappname as string,byval lpkeyname as _
  string,byval lpdefault as string,byval lpretrm-string as string,byval cbreturnstring as integer, _
  byval filename as string)as integer
public declare function getprivatepfileint lib“kernel”(byval lpappname as string,byval lpkeyname as string, _
  byval lpdefault as integer,byval filename as string)as integer
public declare funciton writeprivateprofilestring lib“kernel”(byval lpapplicationname as string, _
  byval lpkeyname as string,byval lpstring as string,byval lplfilename as string)as integer
public function getinis(byval sectionname as string,byvalkeyword as string,byval defstring as string)as string
  dim resultstring as string*144,temp as integer
  dim s as string,i as integer
  temp%=getprivateprofilestring(sectionname,keyword,””,resultstring,144,appprofilename())
  ’检索关键词的值
  if temp%>0 then ’关键词的值不为空 
  s=””
  for i=1 to 144
   if asc(mid$(resultstring,i,1))=0 then
    exitfor
   else
    s=s & mid$(resultstring,i,1)
   end if
  next
  else
  temp%=writeprivateprofilesstring(sectionname,keyword,defstring,ppprofilename())
  ’将缺省值写入ini文件
  s=defstring
  end if
  getinis=s
end function

public function getinin(byval sectionname as string,byval keyword as string,byval defvalue as ineger)as integer
  dim d as long,s as string
  d=defvalue
  getinin=getprivateprofileint(sectionname,
  keyword,defvalue,ppprofilename())
  if d<>defvalue then
   s=””
   d=writeprivateprofilestring(sectionname,
   keyword,s,appprofilename())
  end if
end function

public sub setinis(byval sectionname as string,btval keyword as string,byval valstr as string)
  dim res%
  res%=writeprivateprofilestring(sectionname,keyword,valstr,appprofilename())
end sub
public sub setinin(byval sectionname as string,byval keyword as string,byval valint as integer)
  dim res%,s$
  s$=str$(valint)
  res%=writeprivateprofilestring(sectionname,keyword,s$,appprofilename())
end sub

sectionname为每一部分的标题,keyword为关键词,getinis和getinin中的defvalue为关键词的缺省值,setinis和setinin的valstr和valint为要写入ini文件的关键词的值。为了能更好地说明如何使用以上函数和过程,下面举两个实例。

实例1:

  开发应用程序通常要使用数据库和其它一些文件,这些文件的目录(包括路径和文件名)不应在程序中固定,而是保存在ini文件中,程序运行时由ini文件中读入。读入数据库文件的代码如下:

dim databasename as string
databasename=getinis(“数据库”,“职工”,””)
if databasename=”” then databasename=inputbox(“请输入数据库《职工》的目录”),app.title)
’也可通过“文件对话框”进行选择
on error resume next
set db=opendatabas(databasename)
if err<>0 then
 msgbox“打开数据库失败!”,mb-iconstop,app.title:gotoerrorprocessing
else
 set inis“数据库”,“职工”,databasename
end if
on error goto 0
……

实例2:

  为了方便用户操作,有时需要保存用户界面的某些信息,例如窗口的高度和宽度等。装载窗体时,从ini文件中读入窗体高度和宽度,卸载窗体时将窗体当前高度和宽度存入ini文件,代码如下:

private sub form1_load()
 ……
 forml.height=getinin(“窗体1”,“高度”,6000)
 form1.width=getinin(“窗体1”,“高度”,4500)
endsub
   ……
private sub form1_unload()
 ……
 setinin“窗体1”,“高度”,me.height
 setinin“窗体1,”宽度“,me.width
 ……
end sub

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » VB如何使用INI文件-.NET教程,VB.Net语言
分享到: 更多 (0)