在VC程式下讀取INI檔案

2021-04-21 10:41:06 字數 3232 閱讀 4090

不論是程式開發人員還是軟體應用人員,都不會對擴充套件名為「ini」的檔案感到陌生,不僅windows作業系統將大名鼎鼎的win.ini作為記錄當前系統狀態,並根據其記錄內容對系統進行配置的一種便捷的方法,而且眾多的應用軟體也廣泛地使用該型別的配置檔案來對軟體進行記錄、配置。本文針對配置設定檔案的使用進行討論,以期能為軟體狀態的記錄與設定尋求一種方便簡潔的實現方法。

ini檔案

配置設定(ini)檔案是windows作業系統中的一種特殊ascii檔案,以「ini」為副檔名。該檔案也被稱做是初始化檔案(initialization file)和概要檔案(profile),通常應用程式可以擁有自己的配置設定檔案來儲存狀態資訊。一般來說私有的配置設定檔案比較小,這樣可以減少程式在初始化時讀取配置檔案時的資訊量,從而提高程式的啟動速度、提高應用程式和系統的效能。如果待訪問的資訊涉及到windows系統環境或是其他應用程式時, 就必須在windows系統的配置檔案win.ini中記錄並在訪問的同時傳送wm_wininichange訊息給所有的頂層視窗,通知其他的程式系統配置檔案已做了更改。但由於win.ini中不僅記錄了系統的有關資訊,也儲存著許多其他應用軟體的配置資料,所以訪問的資料量要遠比私有的配置檔案大得多。

配置檔案裡的資訊之所以能為系統和眾多的軟體所讀取並識別,是由於其內部對資料的訪問採用了預先約定的「項-值對(entry-value pairs)」儲存結構, 並對待訪問的資料分門別類地進行條理清晰的儲存。下面是系統目錄下win.ini檔案的部分內容:

[windows]

load=

run=

nullport=none

[desktop]

wall*****style=2

pattern=(無)

[section]

entry=value

其中value值可以有兩種型別: 數值型和字串型。windows作業系統專門為此提供了6個api函式來對配置設定檔案進行讀、寫:

getprivateprofileint() 從私有初始化檔案獲

取整型數值

getprivateprofilestring() 從私有初始化檔案獲

取字串型值

getprofileint 從win.ini獲取整數值

getprofilestring 從win.ini獲取字元

串值writeprivateprofilestring 寫字串到私有初始

化檔案writeprofilestring 寫字串到win.ini

這裡需要指出: 當向配置檔案儲存資訊時,不論是資料還是字串都要先轉換成字串,然後再進行儲存。

api函式的應用

按照通常的程式設計習慣,在程式剛開始執行時對配置設定檔案進行讀取訪問,獲取儲存在其中的資料,並按照這些資料對程式進行配置,比如可以決定載入哪些元件、顯示的位置等等。儲存一般比較靈活,可以顯式地由使用者傳送命令來執行,也可以在程式退出前把當前狀態儲存其內,以便下次執行時能恢復到上次退出時的介面。下面就通過幾個程式片段對前面提到過的訪問配置檔案的api函式的使用進行介紹。

我們可以把檢視類的oninitialupdate 函式作為程式啟動時讀取配置檔案的入口,配置檔案的儲存格式如下:

[section 1]

xpos=300

ypos=200

[section 2]

text=hello

這裡僅有兩個節,xpos和ypos標明了待顯示資訊的座標,而待顯示的資訊儲存在第二節的text項中,用訪問私有配置設定檔案的api函式將其分別讀入到變數m_nxpos、m_nypos和m_strtext中,並通過invalidate呼叫ondraw函式,在其內用textout函式將該資訊在讀取的座標位置顯示出來:

m_nxpos=getprivateprofileint(

「section 1」, //節名

「xpos」, //項名

0, //沒找到此項時的預設返回值

「c://test//debug//test.ini」);

//配置檔案的準確路徑

m_nypos=getprivateprofileint(「section 1」,「ypos」,0,exefullpath);

char buf[256];

len=getprivateprofilestring(

「section 2」, //節名

「text」, //項名

「no text」, //沒找到此項時的返回值

buf, //目標緩衝區位址

256, //目標緩衝區長度

「c://test//debug//test.ini」);

//配置檔案的準確路徑

for(int i=0;i cstring str;

str.format(「%c」,buf[i]);

m_strtext+=str;

invalidate();

tchar exefullpath[max_path];

//max_path在api中有定義,為128

int len=getmodulefilename(null,

exefullpath, //應用程式全路徑存放位址

max_path);

cstring path=「//test.ini」; //配置檔名

::strcpy(exefullpath+len-13,path);

//組合出配置檔案的全路徑

寫配置檔案也基本類似,只是需要把數值型別的變數格式化成字串再行儲存:

str.format(「%d」,m_nxpos);

writeprivateprofilestring(「section 1」,「xpos」,str,exefullpath);

str.format(「%d」,m_nypos);

writeprivateprofilestring(「section 1」,「ypos」,str,exefullpath);

writeprivateprofilestring(「section 2」,「text」,m_strtext,exefullpath);

這樣的程式常遇到: 在執行過一遍以後,重啟系統會自動載入該程式,其實除了在啟動選單和登錄檔新增資訊外,也可以用writeprofilestring函式向win.ini的「windows」節的「run」專案新增應用程式的全路徑來實現,這要比其他兩種方法簡便得多,而且也比較安全。

實踐中,採用ini配置設定檔案是windows下配置系統和應用軟體的一種非常普遍的方法,合理地使用該配置檔案,不僅能增強軟體的自身功能,也可以加強同系統、其他應用軟體的相互聯絡,使我們的程式更加靈活。

在VC下如何讀取chm檔案

在vc下如何讀取chm檔案 在我用vc呼叫了html help之後,才發現用vc呼叫html help並不是一件簡單的事。在visual c 6中呼叫html help沒有現成的函式,需要呼叫htmlhelp 這個api函式。而在呼叫這個函式之前,還需要在你的工程中加上htmlhelp的庫和標頭檔案...

在VC 中讀寫INI檔案

在vc 中讀寫ini檔案 zt 在我們寫的程式當中,總有一些配置資訊需要儲存下來,以便完成程式的功能,最簡單的辦法就是將這些資訊寫入ini檔案中,程式初始化時再讀入.具體應用如下 一.將資訊寫入.ini檔案中.1.所用的winapi函式原型為 其中各引數的意義 lpctstr lpstring 是鍵...

在VC 中讀寫INI檔案

在vc 中讀寫ini檔案 在我們寫的程式當中,總有一些配置資訊需要儲存下來,以便完成程式的功能,最簡單的辦法就是將這些資訊寫入ini檔案中,程式初始化時再讀入.具體應用如下 一.將資訊寫入.ini檔案中.1.所用的winapi函式原型為 其中各引數的意義 lpctstr lpstring 是鍵值,也...