現(xiàn)在許多軟件把程序中需要的數(shù)據(jù)保存在注冊(cè)表中,這樣當(dāng)用戶裝的軟件越來(lái)越多時(shí),致使注冊(cè)表越來(lái)越龐大,容易使系統(tǒng)出錯(cuò)。當(dāng)然,微軟也建議在注冊(cè)表中保存數(shù)據(jù),但當(dāng)我們需要保存的數(shù)據(jù)不多時(shí)完全可以把數(shù)據(jù)保存在WIN.INI中,這樣可以很方便地維護(hù),實(shí)現(xiàn)方法相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。下面我以Borland C++ Builder為例來(lái)說(shuō)說(shuō)如何實(shí)現(xiàn)。
原理其實(shí)很簡(jiǎn)單,只需調(diào)用API的 WriteProfileString和GetProfileInt函數(shù)就可以了。這兩個(gè)函數(shù)的原型是:BOOL WriteProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString );
UINT GetProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault);
其中l(wèi)pAppName指在WIN.INI中段的名字,即用[]括起來(lái)的字符串,lpKeyName指在這個(gè)段中每一個(gè)項(xiàng)目的名字,lpString指這個(gè)項(xiàng)目的值,即“=”后的數(shù), nDefault為當(dāng)GetProfileInt沒有找到lpAppName和lpKeyName時(shí)返回的值,即缺省值,前者返回為布爾值(true 或 false),后者返回為無(wú)符號(hào)整形值。當(dāng)在WriteProfileString函數(shù)中 lpKeyName 為空(NULL)時(shí),則清除這個(gè)段的全部?jī)?nèi)容,lpString 為空時(shí),則清除這一項(xiàng)目的內(nèi)容,即這一行將清除掉。
下面舉一例子來(lái)說(shuō)明這兩個(gè)函數(shù)的用法。新建一個(gè)應(yīng)用程序,在Form1上放兩個(gè)Edit和三個(gè)Button,其中Edit的Text為空,三個(gè)Button的Caption分別為“添加”、“查看”、“清除”。雙擊“添加”按鈕加入下面代碼:
WriteProfileString(“例子程序”,“項(xiàng)目”,Edit1→Text.c_str());
雙擊“查看”按鈕加入如下代碼:
unsigned int Temp;
Temp=GetProfileInt(“例子程序”,“項(xiàng)目”,100);
Edit2→Text=IntToStr(Temp);
雙擊“清除”按鈕加入如下代碼:
WriteProfileString(“例子程序”,NULL,NULL);
然后按F9鍵運(yùn)行程序。
下來(lái)可以檢驗(yàn)一下程序的正確性。在Edit1中輸入數(shù)字,如“3265”,按“添加”按鈕,這時(shí)運(yùn)行“sysedit”來(lái)查看“WIN.INI”文件的最后面,可以看到加入了如下內(nèi)容:
[例子程序]
項(xiàng)目=3265
其中“[]”和“=”是函數(shù)自動(dòng)加上的。按下“查看”按鈕,在Edit2中出現(xiàn)“3265”,當(dāng)按下“清除”按鈕可清除添加的部分。經(jīng)過(guò)查看可知程序已達(dá)到預(yù)期的目的。
喜愛編程的朋友可以把上述方法應(yīng)用到自己的程序中去,來(lái)達(dá)到保存數(shù)據(jù)信息的作用。當(dāng)確實(shí)要把信息保存到注冊(cè)表中,可以在C++ Builder中定義一個(gè)TRegistry類的對(duì)象來(lái)進(jìn)行相關(guān)的操作,或者直接調(diào)用Windows的API函數(shù)。