天天看點

VC讀取ini檔案

INI檔案簡介

在我們寫程式時,總有一些配置資訊需要儲存下來,以便在下一次啟動程式完成初始化,這實際上是一種類持久化。将一些資訊寫入INI檔案(initialization file)中,可完成簡單的持久化支援。

Windows提供了API接口用于操作INI檔案,其支援的INI檔案格式一般如下:

===============================

[Section1]

Key11=value11

Key12=value12

[Section2]

Key21=value21

Key22=value22

...

[SectionN]

KeyN1=valueN1

KeyN2=valueN2

一般一個INI檔案可有N個節,每節可有n個鍵名及值對應,每個鍵名及其值以等式形式占一行。

一般鍵的名稱可任取,不過建議用有意義的字元及詞構成。值一般可為整數和字元串,其它類型要進行轉換。

常見的系統配置檔案:

C:/boot.ini

C:/WINDOWS/win.ini

C:/WINDOWS/system.ini

C:/WINDOWS/desktop.ini

C:/WINDOWS/Resources/Themes/Windows Classic.theme

注意,字元串存貯在INI檔案中時沒有引号;key和value之間的等号前後不容空格;注釋以分号“;”開頭。

VC中操作INI檔案的API

(1)作業系統配置檔案Win.ini的函數:

函數名 功能
GetProfileSection

讀取win.ini中指定節lpAppName中所有鍵名及其值。lpReturnedString字元串形式如下:

Key1=Value1/0Key2=Value2/0…KeyN=ValueN/0/0

GetProfileString 讀取win.ini中指定節lpAppName中鍵名為lpKeyName對應變量的字元串值。
GetProfileInt 讀取win.ini中指定節lpAppName中鍵名為lpKeyName對應變量的整數值。
WriteProfileSection

寫(替換)win.ini中指定節lpAppName中的鍵值。

lpString字元串形式同GetProfileSection中的lpReturnedString。

WriteProfileString 寫(替換)win.ini中指定節lpAppName中鍵名為lpKeyName對應變量的字元串值。

 (2)操作使用者自定義配置檔案(PrivateProfile.ini)的函數:

GetPrivateProfileSectionNames

讀取lpFileName指定的配置檔案中所有的節名。lpszReturnBuffer字元串形式如下:

Section1/0Section2/0…SectionN/0/0

GetPrivateProfileSection 同GetProfileSection。
GetPrivateProfileString 同GetProfileString。
GetPrivateProfileInt      同GetProfileInt
GetPrivateProfileStruct 須同WritePrivateProfileStruct配套使用。
WritePrivateProfileSection 同WriteProfileSection
WritePrivateProfileString 同WriteProfileString
WritePrivateProfileStruct 不常用。

注意:

(1)使用得最頻繁的是 GetPrivateProfileString 和 WritePrivateProfileString,沒有WriteProfileInt/WritePrivateProfileInt函數。

(2)Get系列讀取節鍵值,如果檔案路徑有誤或節鍵名不對則傳回設定的預設值。

(3)訪存自定義配置檔案時,檔案路徑lpFileName必須完整,檔案名前面的各級目錄必須存在。如果lpFileName檔案路徑不存在,則函數傳回FALSE,GetLastError() = ERROR_PATH_NOT_FOUND。如果路徑正确,但是檔案不存在,則該函數将先建立該檔案。如果路徑及檔案存在,則在現有ini檔案基礎上進行讀寫。

如果 lpFileName 隻指定檔案名而沒有路徑的話,調用API将會去 Windows 的安裝目錄去查找而不會在目前目錄查找。

(4)要對調用API的子產品(exe)所在目錄下進行配置檔案操作,可使用形如“.//config.ini”的相對路徑,注意轉義符。

(5)調用WritePrivateProfileSection,若參數三 lpString為NULL,則可将對應section的全部内容清空;調用WritePrivateProfileString,若參數三 lpString為NULL,則可将對應key删除。

跨平台配置檔案

INI檔案本質是對檔案和字元串的處理,是以在跨平台項目中的配置檔案可以基于<stdio.h>中的标C檔案FILE,然後實作像類似以上對節([Section])、鍵(Key)和值(Value)的字元串讀寫功能。

鑒于XML的樹形描述層次結構性清晰,現在很多軟體都大面積使用XML檔案進行配置,如QQ的全局配置檔案C:/Program Files/Tencent/QQ/gf-config.xml。java程式的配置檔案基本都使用XML格式,C++中并沒有操作XML檔案的标準庫。

在C/C++程式中要使用XML做為配置檔案,涉及到XML的解析。Windows平台可使用MsXml對XML進行解析,參考《MsXml建立和解析XML示例》,跨平台可以考慮自己實作,或使用C++ BOOST正規表達式,或選擇Free C or C++ XML Parser Libraries,如XmlParser、TinyXML、CMarkup、libxml等。

CIniFile類

    以下提供對Windows操作INI檔案的API的簡單封裝類CIniFile。

繼續閱讀