[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
新聞熱點
疑難解答