?? 12.6.3 win.ini文件的讀取.txt
字號:
12.6.3 Win.ini文件的讀取
如果想要獲取 Win .i ni文件中保存的初始化信息,可以利用 Win32 API提供的 GetProfile String
函數(shù)來實現(xiàn)。該函數(shù)的作用是獲取初始化文件 Win .ini中的指定段下的一個字符串。該函數(shù)的聲明
形式如下所示。
DWORD GetProfi1eString(
LPCTSTR 1pAppName,
LPCTSTR 1pKeyName,
LPCTSTR 1pDefau1t ,
LPTSTR 1pReturnedString,
DWORD nSize
可見, GetProfileString函數(shù)有五個參數(shù),各參數(shù)的含義分別如下所述 :
. IpAppName
指向一個空終止的字符串的指針,該字符串指定含有所需鍵的段。
. IpKeyName
指向一個空終止的字符串的指針,該字符串包含了一個鍵的名稱,與該鍵相關(guān)聯(lián)的字符串將被獲取。
. IpDefault
指向一個空終止的默認(rèn)字符串。若參數(shù) IpKeyName所指定的鍵不存在于 Win.ini文件中,則函數(shù)
GetProfileString將使用該默認(rèn)字符串復(fù)制至參數(shù) 1 pReturnedString所指向的緩沖區(qū)中。
. IpReturnedString
指向一個緩沖區(qū)的指針,該緩沖區(qū)將接收獲得的字符串。
. nSize
指定參數(shù) IpReturnedString所指向的緩沖區(qū)的大小,單位是字節(jié)。
下面就在 File程序中利用 GetProfileString函數(shù)獲取上面程序?qū)?λWin .i ni文件中的信息。同樣,
將這個操作放置到 CFileApp類的 Initlnstance函數(shù)中,先將上面如例 12-24所示代碼中那條加灰
顯示的 WriteProfileString函數(shù)調(diào)用注釋起來,然后在其后添加如例 12-25所示代碼。
例 12-25
CString str;
: : GetProfileString ("http://www . sunxin.org" , "admin" , "lisi",str.GetBuffer(100) , 100) ; AfxMessageBox(str) ;
在上述如例 12-25所示的代碼中,首先定義了一個 CString對象:str,用來接收從 Win.ini文件中獲
取的信息。接著調(diào)用 Win32 API提供的 GetProfileString函數(shù)獲取上面程序?qū)懭?Win .ini文件中
的信息,并將鍵的默認(rèn)值設(shè)置為 "lisi"。因為 GetProfileString函數(shù)的第四個參數(shù)需要的是一個
指向字符串的指針 (LPTSTR類型),正好 CString類的 GetBuffer函數(shù)
可以返回這種類型的值,所以直接調(diào)用該函數(shù)為這個參數(shù)傳值。 GetBu仔er函數(shù)有一個參數(shù),用于
指定字符串的長度,本例將此長度設(shè)置為 100。最后利用 AfxMessageBox函數(shù)顯示讀取到的數(shù)據(jù)。
在這里之所以使用全局函數(shù): AfxMessageBox來顯示消息框,是因為 CWinApp類并不是從 Wnd類派生
的,因此它沒有 MessageBox函數(shù)。
運行 File程序,程序?qū)棾鋈鐖D 12.16所示的消息框,可以看到程序從 Win .i ni文件中
獲取到了正確的結(jié)果。
提示:當(dāng)本例成功實現(xiàn)之后,讀者應(yīng)記得將自己機(jī)器上 Win.ini文件中自
己添加的內(nèi)容刪除了。
前面己經(jīng)提到,在 CWinApp類中也有 WriteProfileString和 GetProfileString函數(shù),那么它們與
Win32 API中相應(yīng)函數(shù)有什么區(qū)別呢? CWinApp類的 WriteProfileString函數(shù)的聲明形式如下所示:
BOOL WriteProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue };
可以看到, CWinApp類提供的 WriteProfileString函數(shù)和 Win32 API提供的相應(yīng)函數(shù)一樣,也有三
個參數(shù),分別指定將要寫入的段名、項名和項的值。但是在不同的操作系統(tǒng)下,該函數(shù)實現(xiàn)的功能
不一樣。在 Windows NT系統(tǒng)下,該函數(shù)將把信息存儲到注冊表中:在 Windows 3.x系統(tǒng)下,該函數(shù)
將把信息寫入 wmini文件中:在 Windows 95系統(tǒng)下,該函數(shù)將把信息寫入 win-ini文件的一個緩沖
版本中,主要是為了提升系統(tǒng)的性能。筆者使用的系統(tǒng)是 Windows 2000,所以調(diào)用 CWinApp類的
WriteProfI1eString函數(shù)之后,將把信息寫入到注冊表中,而不是 Win .i ni文件中。這與 Win32 API
提供的 WriteProfileString函數(shù)是有區(qū)別的。
下面就在 File程序中利用 CWinApp類的 WriteProfileString函數(shù)保存程序的初始信息。同樣,將
這個操作放置到 CFileApp類的InitIn stance函數(shù)中,先將先前在該函數(shù)中添加的如例 12-25所示
代碼全部注釋起來,然后在 SetRegistryKey函數(shù)調(diào)用之后添加下面這條代碼 :
食 WriteProfileString("http://www.sunxin.org", "admin", "zhangsan");
運行 File程序,然后用 regedit命令打開注冊表,將會看到我們剛剛寫入的信息位于:
HKEY_CURRENT_USER\SOFIWARE\Local AppWizard-Generated Applications\File子項下,如圖
12.17所示。
讀者可以發(fā)現(xiàn)注冊表項: Local AppWizard-Generated Applications與 File程序中 SetRegis町Key
函數(shù)調(diào)用的參數(shù)值(可參照如例 12-24所示代碼)完全一樣,由此可見,
正是因為在該函數(shù)中指定的參數(shù)在注冊表中才有這個工頁。為了驗證這一點,我們可以把
SetRegistryKey函數(shù)的參數(shù)替換為另一個字符串,例如替換為一個網(wǎng)址: http://www. suruin-org,
再次運行File程序,然后打開注冊表,發(fā)現(xiàn)這時寫入的信息保存在了HKEY CURRENT
USER\SOFI'WARE\http://www.sunxin.org \File子項下,如圖 12.18所示。
圖 12.17 CWinApp類的WriteProfileString函數(shù)調(diào)用結(jié)果
圖 12.18改變SetRegis町lKey函數(shù)參數(shù)之后的信息保存位置
小技巧:按下鍵盤上的自鍵,可以刷新注冊表編輯器的內(nèi)容。
CWinApp類提供的GetProfileString函數(shù)的聲明形式如下所示:
CString GetProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault =
NULL };
可以看到, CWinApp類提供的 GetProfileString函數(shù)有三個參數(shù),分別指定將要讀取的段名、項名
和項的默認(rèn)值。該函數(shù)將返回從注冊表中或從 Win.ini文件中獲得的字符串。
下面,我們就在File程序中利用CWinApp類的GetProfùeS位ing函數(shù)從注冊表中讀取上面寫入的信息。
同樣,將這個操作放置到CFileApp類的InitInstance函數(shù)中,先將先前在該函數(shù)中添加的代碼(即上
面,傳符號所示的那行代碼)注釋起來,然后在SetRegis町Key
函數(shù)調(diào)用之后添加如例 12-26所示代碼。
CString str;
str=GetProfileString ( " http: //www . sunxin . org", "admin" ) ;
AfxMessageBox(str) ;
在上述代碼中,首先調(diào)用 CWinApp類提供的 GetProfùeS住ing函數(shù)獲取先前寫入注冊表中的信息,
然后利用AfxMessageBox函數(shù)將獲得的信息顯示出來。讀者可以運行一下 File程序,可以看到程序
將得到正確的信息。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -