]對INI檔案的讀寫

來源:互聯網
上載者:User

將必要資訊儲存在ini中
相關ini操作如下
======================================
在程式中經常要用到設定或者其他少量資料的存檔,以便程式在下一次執行的時候可以使用,比如說儲存本次程式執行時視窗的位置、大小、一些使用者佈建的資料等等,在   Dos 下編程的時候,我們一般自己產生一個檔案,由自己把這些資料寫到檔案中,然後在下一次執行的時候再讀出來使用。在 Win32 編程中當然你也可以這樣幹,但   Windows 已經為我們提供了兩種方便的辦法,那就是使用註冊表或者 ini 檔案(Profile)來儲存少量資料。本文中先介紹一下 .ini 檔案的使用。

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 lpAppName, // 指向包含 Section 名稱的字串地址
    LPCTSTR lpKeyName, // 指向包含 Key 名稱的字串地址
    INT nDefault // 如果 Key 值沒有找到,則返回預設的值是多少
    );
   
    如果 Key 值沒有找到的話,傳回值是 nDefault 指定的預設值,如果 Key 中的值是負數,則返回 0,如果 Key 指定的是數字和字串的混合,則返回數字部分的值,比如說     x=1234abcd,則返回 1234
   
 
  •GetProfileString - 從 Win.ini 檔案的某個 Section 取得一個 key 的字串,它的原形是:
   
    GetProfileString(
    LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址
    LPCTSTR lpKeyName, // 指向包含 Key 名稱的字串地址
    LPCTSTR lpDefault, // 如果 Key 值沒有找到,則返回預設的字串的地址
    LPTSTR lpReturnedString, // 返回字串的緩衝區地址
    DWORD nSize // 緩衝區的長度
    );
   
    返回的字串在緩衝區內,返回的 eax 值是返回的字串的長度(不包括尾部的0)
   
 
  •GetProfileSection - 從 Win.ini 檔案中讀出整個 Section 的內容,它的原形是:
   
    GetProfileSection(
    LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址
    LPTSTR lpReturnedString, // 返回資料的緩衝區地址
    DWORD nSize // 返回資料的緩衝區長度
    );
   
 
  •WriteProfileSection - 將一個整個 Section 的值 寫入 Win.ini 檔案的指定 Section 中,它的原形是:
   
    WriteProfileSection(
    LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址
    LPCTSTR lpString // 要寫入的資料的地址
    );
   
    如果 Win.ini 沒有指定的 Section,API 會建立立一個並寫入資料,如果已經存在,則先刪除原來 Seciton 中所有的 Key 值然後寫入新的。
   
 
  •WriteProfileString - 將一個 Key 值寫入 Win.ini 檔案的指定 Section 中,它的原形是:
   
    WriteProfileString(
    LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址
    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 lpAppName, // 指向包含 Section 名稱的字串地址
    LPCTSTR lpKeyName, // 指向包含 Key 名稱的字串地址
    INT nDefault // 如果 Key 值沒有找到,則返回預設的值是多少
    LPCTSTR lpFileName // ini 檔案的檔案名稱
    );
   
    中間參數和傳回值的定義和 GetProfileInt 是一樣的。
   
 
  •GetPrivateProfileString - 從 ini 檔案的某個 Section 取得一個 key 的字串,它的原形是:
   
    GetPrivateProfileString(
    LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址
    LPCTSTR lpKeyName, // 指向包含 Key 名稱的字串地址
    LPCTSTR lpDefault, // 如果 Key 值沒有找到,則返回預設的字串的地址
    LPTSTR lpReturnedString, // 返回字串的緩衝區地址
    DWORD nSize // 緩衝區的長度
    LPCTSTR lpFileName // ini 檔案的檔案名稱
    );
   
 
  •GetPrivateProfileSection - 從 ini 檔案中讀出整個 Section 的內容,它的原形是:
   
    GetPrivateProfileSection(
    LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址
    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 lpAppName, // 指向包含 Section 名稱的字串地址
    LPCTSTR lpString // 要寫入的資料的地址
    LPCTSTR lpFileName // ini 檔案的檔案名稱
    );
   
 
  •WritePrivateProfileString - 將一個 Key 值寫入 ini 檔案的指定 Section 中,它的原形是:
   
    WritePrivateProfileString(
    LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址
    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。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.