ini檔案操作相關

2021-09-30 08:46:41 字數 4999 閱讀 3924

ini和xml經常用於遊戲配置檔案的編寫。先介紹ini檔案的基本知識:

在程式中經常要用到設定或者其他少量資料的存檔,以便程式在下一次執行的時候可以使用,比如說儲存本次程式執行時視窗的位置、大小、一些使用者設定的資料等等,在 dos 下程式設計的時候,我們一般自己產生乙個檔案,由自己把這些資料寫到檔案中,然後在下一次執行的時候再讀出來使用。在 win32 程式設計中當然你也可以這樣幹,但 windows 已經為我們提供了兩種方便的辦法,那就是使用登錄檔或者 ini 檔案(profile)來儲存少量資料。本文中先介紹一下 .ini 檔案的使用。

[section1 name]

keyname1=value1

keyname2=value2

...

[section2 name]

keyname1=value1

keyname2=value2

ini 檔案可以分為幾個 section,每個 section 的名稱用 括起來,在乙個 section 中,可以有很多的 key,每乙個 key 可以有乙個值並占用一行,格式是 key=value,win32 對 ini 檔案操作的 api 中,有一部分是對 win.ini 操作的,有一部分是對使用者自定義的 ini 檔案操作的。win.in 和 system.ini 是windows的兩個非常重要的初始化檔案,windows將使用者所作的選擇以及各種變化的系統資訊記錄在這兩個檔案中。system.ini 描述了系統硬體的當前狀態,win.ini 檔案則包含了windows 系統執行環境的當前配置。由於 win.ini 檔案的重要性和常用性,win32 中有專門對 win.ini 進行操作的 api,它們是:

getprofileint - 從 win.ini 檔案的某個 section 取得乙個 key 的整數值,它的原形是:

getprofileint(

lpctstr lpkeyname, // 指向包含 key 名稱的字串位址

int ndefault // 如果 key 值沒有找到,則返回預設的值是多少

); 如果 key 值沒有找到的話,返回值是 ndefault 指定的預設值,如果 key 中的值是負數,則返回 0,如果 key 指定的是數字和字串的混合,則返回數字部分的值,比如說 x=1234abcd,則返回 1234

getprofilestring - 從 win.ini 檔案的某個 section 取得乙個 key 的字串,它的原形是:

getprofilestring(

lpctstr lpkeyname, // 指向包含 key 名稱的字串位址

lpctstr lpdefault, // 如果 key 值沒有找到,則返回預設的字串的位址

lptstr lpreturnedstring, // 返回字串的緩衝區位址

dword nsize // 緩衝區的長度

); 返回的字串在緩衝區內,返回的 eax 值是返回的字串的長度(不包括尾部的0)

getprofilesection - 從 win.ini 檔案中讀出整個 section 的內容,它的原形是:

getprofilesection(

lptstr lpreturnedstring, // 返回資料的緩衝區位址

dword nsize // 返回資料的緩衝區長度

); writeprofilesection - 將乙個整個 section 的值 寫入 win.ini 檔案的指定 section 中,它的原形是:

writeprofilesection(

lpctstr lpstring // 要寫入的資料的位址

); 如果 win.ini 沒有指定的 section,api 會新建立乙個並寫入資料,如果已經存在,則先刪除原來 seciton 中所有的 key 值然後寫入新的。

writeprofilestring - 將乙個 key 值寫入 win.ini 檔案的指定 section 中,它的原形是:

writeprofilestring(

lpctstr lpkeyname, // 指向包含 key 名稱的字串位址

lpctstr lpstring // 要寫的字串位址

); 如果 win.ini 沒有指定的 section,api 會新建 section,如果沒有指定的 key 則新建乙個 key 並寫入

資料,如果已經存在,則用字串代替原來的值。

以上的 api 是對 win.ini 操作的,當然對於我們來說,用的更多的是在程式執行的目錄中建立自己的 ini

檔案,如果需要對自己的 ini 檔案操作,就要用到另一組 api,這一組 api 和上面的很象,只要把上面

一組的 profile 換成 privateprofile(私有的)就可以了,引數中也相應的多了乙個 ini 檔名的引數。

例如 getprivateprofileint、getprivateprofilesection、writeprivateprofilestring 等等, 下面分

別介紹:

getprivateprofileint - 從 ini 檔案的某個 section 取得乙個 key 的整數值,它的原形是:

getprivateprofileint(

lpctstr lpkeyname, // 指向包含 key 名稱的字串位址

int ndefault // 如果 key 值沒有找到,則返回預設的值是多少

lpctstr lpfilename // ini 檔案的檔名

); 中間引數和返回值的定義和 getprofileint 是一樣的。

getprivateprofilestring - 從 ini 檔案的某個 section 取得乙個 key 的字串,它的原形是:

getprivateprofilestring(

lpctstr lpkeyname, // 指向包含 key 名稱的字串位址

lpctstr lpdefault, // 如果 key 值沒有找到,則返回預設的字串的位址

lptstr lpreturnedstring, // 返回字串的緩衝區位址

dword nsize // 緩衝區的長度

lpctstr lpfilename // ini 檔案的檔名

); getprivateprofilesection - 從 ini 檔案中讀出整個 section 的內容,它的原形是:

getprivateprofilesection(

lptstr lpreturnedstring, // 返回資料的緩衝區位址

dword nsize // 返回資料的緩衝區長度

lpctstr lpfilename // ini 檔案的檔名

); 這個 api 可以讀出整個 section 的內容,當你不知道 section 中有哪些 key 的時候,可以使用這個

api 將整個 section 讀出後再處理。

getprivateprofilesectionnames - 從 ini 檔案中獲得 section 的名稱,它的原形是:

getprivateprofilesectionnames(

lptstr lpszreturnbuffer, // 返回資料的緩衝區位址

dword nsize // 返回資料的緩衝區長度

lpctstr lpfilename // ini 檔案的檔名

); 如果 ini 中有兩個 section: [sec1] 和 [sec2],則返回的是 'sec1',0,'sec2',0,0 ,當你不知道 ini 中

有哪些 section 的時候可以用這個 api 來獲取名稱

writeprivateprofilesection - 將乙個整個 section 的內容入 ini 檔案的指定 section 中,它的原形是:

writeprivateprofilesection(

lpctstr lpstring // 要寫入的資料的位址

lpctstr lpfilename // ini 檔案的檔名

); writeprivateprofilestring - 將乙個 key 值寫入 ini 檔案的指定 section 中,它的原形是:

writeprivateprofilestring(

lpctstr lpkeyname, // 指向包含 key 名稱的字串位址

lpctstr lpstring // 要寫的字串位址

lpctstr lpfilename // ini 檔案的檔名

); 如果 ini 中沒有指定的 section,api 會新建 section,如果沒有指定的 key 則新建乙個 key 並寫

入資料,如果已經存在,則用字串代替原來的值。當指定的 ini 也不存在的時候,api 會自動建立乙個

新的檔案,所以使用 ini 的好處是我們不必為了儲存少量的資料涉及到檔案操作,就連查詢檔案是否存在

的操作都不必要。

使用要點:

在我們實際使用的時候,用的最多的是 getprivateprofilestring 和 writeprivateprofilestring,

但在對自定義 ini 檔案操作的時候要注意的是,如果 lpfilename 指定的檔案沒有路徑的話,

api 會去 windows 的安裝目錄去找而不會在當前目錄找,但是每次用到 ini 函式要獲取當前路徑顯然

太麻煩了,這裡有乙個變通的辦法,你只要在 ini 檔名前面加上 ./ 就可以了,比如說要對本目錄下的

user.ini 操作,那麼檔名就是 './user.ini' 這樣顯然比較方便。另外,當你要把乙個 key 清除的時候,

可以使用把 lpstring 指向乙個空的字串然後使用 writeprivateprofilestring。當你要把乙個 section

的全部內容清空的時候,也不必把 key 乙個個的清除,可以使用把 lpstring 指向乙個空的字串然後

使用 writeprivateprofilesection。

開源庫的使用:推薦cinifile類,www.sourceforge.com (我的126郵箱有。。。^_^)

ini檔案操作

uses inifiles 寫入 varfilename string fileini tinifile begin filename extractfilepath paramstr 0 connect.ini fileini tinifile.create filename fileini.wr...

ini檔案操作

using system using system.collections.generic using system.linq using system.text using system.runtime.interopservices using system.io namespace inifi...

ini檔案操作

最近在整ini檔案,看到一篇不錯的介紹就轉了過來 概述在程式中經常要用到設定或者其他少量資料的存檔,以便程式在下一次執行的時候可以使用,比如說儲存本次程式執行時視窗的位置 大小 一些使用者設定的資料等等,在 dos 下程式設計的時候,我們一般自己產生乙個檔案,由自己把這些資料寫到檔案中,然後在下一次...