在VB應用程式中使用INI檔案的一點體會 (轉)

worldblog發表於2007-12-04
在VB應用程式中使用INI檔案的一點體會 (轉)[@more@]

摘要 結合例項介紹了在VB中 操作初始化的方法和優點.
關鍵詞  Windows API INI檔案

一、INI檔案概述

Windows INI檔案,可解釋為Windows初始化檔案。它是一種專門用來儲存應用初始化資訊和執行環境資訊的文字檔案。例如Windows 3.1中兩個著名的INI檔案win.ini和system.ini就在Windows啟動時定義了Windows環境中滑鼠響應速度、使用的外殼()程式等設定。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檔案的幾個Windows API函式

在開發應用程式時,我們可以建立應用程式自己的INI檔案,透過INI檔案儲存應用程式的一些執行環境資訊,然後在程式中讀取INI檔案中的設定資訊並據以處理。一旦程式的執行環境需要變更,則可以透過直接修改INI檔案或在程式中提供專門的介面間接地修改INI檔案來保證程式的可用性。

VB()語言是近年來十分流行的一種面向的語言,但VB本身並不提供操縱INI檔案的函式。所幸的是, VB支援DLL(Dynamic Link Library)的呼叫。(一個DLL事實上就是一個可供其它支援DLL呼叫的應用程式呼叫的外部函式集。)DLL中的函式稱為API(應用程式設計介面,Application Programming Interface)函式。我們可以透過呼叫相應的API函式來實現操縱INI檔案的功能。下面列出了相關的API函式及其說明。在使用這些函式之前,必須首先在VB的模組檔案(.bas)中用Declare語句對它們進行宣告。



三、例項分析

下面就筆者參加天津財經學院教學辦公自動化(OA)系統開發的實踐介紹一下具體的實現方法。假定專案檔案為man.mak,對應的INI檔案為man.ini,其部分內容如下:

[]
檔名=DEC_LX5120OA.mdb
[開戶銀行]
型別數=3
B1=中國人民銀行
B2=中國農業銀行
B3=中國工商銀行

1. 在程式啟動時(SUB MAIN()和SUB FORM_LOAD()),從man.ini檔案中讀取相應的值並進行以後的操作。其中SUB MAIN()中的有關程式碼如下:

Dim DbName as String*255  '資料庫名
Dim n as Integer
'得到INI檔名,INIfileName為一全域性變數
INIfileName=App.Path&""&app.ExeName&".ini"
'從man.ini中讀取資料庫檔名
n=GetPrivateProfileString("資料庫","檔名","",DbName,Len(DbName),INIfileName)
DbName=Left(DbName,n)
'開啟資料庫,Db為一全域性變數
Set  Db=OpenDatabase(DbName)
在FORM_LOAD()過程中,讀取了man.ini中有關的內容並加入相應的組合框(Combo Box)列表中。這裡只給出對"[開戶銀行]"段的相應操作,程式碼如下:
Dim BankCount as Integer  '銀行型別數
Dim BankName as String*255  '銀行名
Dim i as Integer,n as Integer
'讀取原有銀行型別數
BankCount=GetPrivateProfileInt("開戶銀行","型別數",0,INIfileName)
'讀取銀行名並加入到組合框cmbBank中
For I=1 to BankCount
n=GetPrivateProfileString("開戶銀行","B"&i,BankName,Len(BankName),INIfileName)
BankName=Left(BankName,n)
cmbBank.AddItem BankName
Next I

2. 在程式中提供了一個專用維護介面,該介面透過操作INI檔案的相應內容來實現相應的修改。

'下面程式碼實現資料庫路徑的修改
Dim n as Integer
'txtDbName.Text對應新的資料庫檔名
If  txtDbName.Text=""  Then
  MsgBox "資料庫檔名不能為空!",MB_ICONSTOP,App.Title
  txtDbName.SetFocus
  Exit Sub
Else
  '修改資料庫檔名
  n=WritePrivateProfileString("資料庫","檔名",txtDbName.Text,INIfileName)
End If

'下面程式碼往組合框"開戶銀行"中增加一個新銀行
Dim NewBank as String  '新銀行名
Dim BankCount as Integer  '銀行型別數
Dim I as Integer,n as Integer
'輸入新銀行名
NewBank=InputBox("增加開戶銀行。",App.Title,"")
If  NewBank=""  Then
  MsgBox "銀行名不能為空!",MB_ICONSTOP,App.Title
  Exit Sub
Else
  '判斷輸入的銀行名是否已存在於列表中
  For  I=0  to   cmbBank.ListCount-1
  If  NewBank=cmbBank.List(i)   Then
  '存在則終止
  MsgBox NewBank&"已存在於列表中!",MB_ICONSTOP,App.Title)
  Exit Sub
  End If
  Next I
  '讀取原銀行型別數
  BankCount=GetPriVateProfileInt("開戶銀行","型別數",0,INIfileName)
  '將銀行型別數增1
  BankCount=BankCount+1 
n=WritePrivateProfileString("開戶銀行","型別數",Str(BankCount),INIfileName)
  '將新銀行名寫入INI檔案中
  n=WritePrivateProfileString("開戶銀行","B"&BankCount,NewBank,INIfileName)
End If

四、結論

綜上所述,在實際的VB應用程式開發中,適當地利用INI檔案,可以很好地改善程式的可維護性和可用性。尤其在資料庫訪問中使用INI檔案可使在資料庫路徑改變時免去修改原始碼之苦。在實際開發中,若結合一定的維護介面,也可使應用程式容易維護,增強友好性。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988217/,如需轉載,請註明出處,否則將追究法律責任。

相關文章