一、INI文件概述
WindowsINI文件,可解釋為Windows初始化文件。它是一種專門用來保存應用程序初始化信息和運行環境信息的文本文件。例如Windows3.1中兩個著名的INI文件win.ini和system.ini就在Windows啟動時定義了Windows環境中鼠標響應速度、使用的外殼(shell)程序等設置。Windows系統附帶的許多應用程序也都有自己的INI文件,例如控制面板的INI文件為control.ini,它也同樣定義了控制面板的有關設置。ini文件是一種文本文件,它可以通過Notepad等文本編輯器進行編輯。ini文件具有特定的格式。一個INI文件是由若干個段(section)組成的,每個段中包含若干關鍵字(key)及相應的值(value)。段的格式如下:
[SectionName]
KeyName=Value
其中SectionName和KeyName分別是段名和關鍵字名,Value為關鍵字對應的設定值。需要加以注意的是:
(1)段名必須加以"["和"]",且"["必須在屏幕的第一列;
(2)關鍵字名也必須從屏幕的第一列開始書寫,且後面必須緊跟"=";
(3)可以對文件加以注釋,每行注釋須以";"開頭。
在Windows中,可以通過手工編輯INI文件來改變應用程序設置。如要想將Windows的外殼程序改為文件管理器,則可將system.ini中[boot]段下的"shell=progman.exe"改為"shell=winfile.exe"。有些設置也可以直接在應用程序界面上更改,但實際上也是通過修改INI文件來保存這些修改的。
二、在VB中操作INI文件的幾個WindowsAPI函數
在開發應用程序時,我們可以創建應用程序自己的INI文件,通過INI文件保存應用程序的一些運行環境信息,然後在程序中讀取INI文件中的設置信息並據以處理。一旦程序的運行環境需要變更,則可以通過直接修改INI文件或在程序中提供專門的界面間接地修改INI文件來保證程序的可用性。
VB(VisualBasic)語言是近年來十分流行的一種面向對象的編程語言,但VB本身並不提供操縱INI文件的函數。所幸的是,VB支持DLL(DynamicLinkLibrary)的調用。(一個DLL事實上就是一個可供其它支持DLL調用的應用程序調用的外部函數集。)DLL中的函數稱為API(應用編程接口,ApplicationProgrammingInterface)函數。我們可以通過調用相應的API函數來實現操縱INI文件的功能。下面列出了相關的API函數及其說明。在使用這些函數之前,必須首先在VB的模塊文件(.bas)中用Declare語句對它們進行聲明。
三、實例分析
下面就筆者參加天津財經學院教學辦公自動化(OA)系統開發的實踐介紹一下具體的實現方法。假定項目文件為man.mak,對應的INI文件為man.ini,其部分內容如下:
[數據庫]
文件名=DEC_LX5120DBOA.mdb
[開戶銀行]
類型數=3
B1=中國人民銀行
B2=中國農業銀行
B3=中國工商銀行
1.在程序啟動時(執行SUBMAIN()和SUBFORM_LOAD()),從man.ini文件中讀取相應的值並進行以後的操作。其中SUBMAIN()中的有關代碼如下:
DimDbNameasString*255'數據庫名
DimnasInteger
'得到INI文件名,INIfileName為一全局變量
INIfileName=App.Path&""&app.ExeName&".ini"
'從man.ini中讀取數據庫文件名
n=GetPrivateProfileString("數據庫","文件名","",DbName,Len(DbName),INIfileName)
DbName=Left(DbName,n)
'打開數據庫,Db為一全局變量
SetDb=OpenDatabase(DbName)
在FORM_LOAD()過程中,讀取了man.ini中有關的內容並加入相應的組合框(ComboBox)列表中。這裡只給出對"[開戶銀行]"段的相應操作,代碼如下:
DimBankCountasInteger'銀行類型數
DimBankNameasString*255'銀行名
DimiasInteger,nasInteger
'讀取原有銀行類型數
BankCount=GetPrivateProfileInt("開戶銀行","類型數",0,INIfileName)
'讀取銀行名並加入到組合框cmbBank中
ForI=1toBankCount
n=GetPrivateProfileString("開戶銀行","B"&i,BankName,Len(BankName),INIfileName)
BankName=Left(BankName,n)
cmbBank.AddItemBankName
NextI
2.在程序中提供了一個專用維護界面,該界面通過操作INI文件的相應內容來實現相應的修改。
'下面代碼實現數據庫路徑的修改
DimnasInteger
'txtDbName.Text對應新的數據庫文件名
IftxtDbName.Text=""Then
MsgBox"數據庫文件名不能為空!",MB_ICONSTOP,App.Title
txtDbName.SetFocus
ExitSub
Else
'修改數據庫文件名
n=WritePrivateProfileString("數據庫","文件名",txtDbName.Text,INIfileName)
EndIf
'下面代碼往組合框"開戶銀行"中增加一個新銀行
DimNewBankasString'新銀行名
DimBankCountasInteger'銀行類型數
DimIasInteger,nasInteger
'輸入新銀行名
NewBank=InputBox("增加開戶銀行。",App.Title,"")
IfNewBank=""Then
MsgBox"銀行名不能為空!",MB_ICONSTOP,App.Title
ExitSub
Else
'判斷輸入的銀行名是否已存在於列表中
ForI=0tocmbBank.ListCount-1
IfNewBank=cmbBank.List(i)Then
'存在則終止
MsgBoxNewBank&"已存在於列表中!",MB_ICONSTOP,App.Title)
ExitSub
EndIf
NextI
'讀取原銀行類型數
BankCount=GetPriVateProfileInt("開戶銀行","類型數",0,INIfileName)
'將銀行類型數增1
BankCount=BankCount 1
n=WritePrivateProfileString("開戶銀行","類型數",Str(BankCount),INIfileName)
'將新銀行名寫入INI文件中
n=WritePrivateProfileString("開戶銀行","B"&BankCount,NewBank,INIfileName)
EndIf
四、結論
綜上所述,在實際的VB應用程序開發中,適當地利用INI文件,可以很好地改善程序的可維護性和可用性。尤其在數據庫訪問中使用INI文件可使用戶在數據庫路徑改變時免去修改原代碼之苦。在實際開發中,若結合一定的維護界面,也可使應用程序容易維護,增強友好性。->