C++讀寫ini配置檔案GetPrivateProfileString WritePrivateProfileStr
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
轉自:http://hi.baidu.com/andywangcn/blog/item/10ba730f48160eeb37d122e9.html
配置檔案中經常用到ini檔案,在VC中其函式分別為: #include <Windows.h> //wince,WMobile.ppc不支援這幾個函式 寫入.ini檔案:bool WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);
讀取整形值:UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName); 其中個引數的意思: LPCTSTR lpAppName ------- INI檔案中的一個欄位名 LPCTSTR lpKeyName -------- lpAppName 下的一個鍵名,也就是裡面具體的變數名 LPCTSTR lpDefaut ----------如果沒有其前兩個引數值,則將此值賦給變數 LPSTR lpReturnedString --------接收INI檔案中的值的CString物件,即接收緩衝區 DWORD nSize ------接收緩衝區的大小 LPCTSTR lpFileName --------完整的INI檔案路徑名 LPCTSTR lpString ---------是鍵值,也就是變數的值, 必須為LPCTSTR或CString型別 例子: CString StrName,Strtemp; int nAge; StrName = "jacky"; nAge = 13; WritePrivateProfileString("Student","Name",StrName,"c://setting.ini"); 結果:(INI檔案中顯示如下:) [Student] Name=jacky 讀取: CString str; GetPrivateProfileString( 結果:str = "jacky";這裡需要注意點就是用完GetBuffer函式後一定要釋放(用str.ReleaseBuffer()函式),不然後面再用到SName的其他子函式就會失靈。 3.讀入整型值要用另一個WINAPI函式: nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c://stud//student.ini"); 在GetPrivateProfileString最後一個引數是配置檔案路徑的引數,此路徑只能是絕對路徑,不能是相對路徑,但現在我需要是我的exe檔案能和我的配置檔案在一起。因此我使用了GetCurrentDirectory函式。 原始碼如下: CString server_ip; 注意:在這裡使用CString變數時,在使用完GetBuffer後,緊接著一定要使用ReleaseBuffer()函式,才可以進行其他的諸如字串+操作 補充四點: 1.INI檔案的路徑必須完整,檔名前面的各級目錄必須存在,否則寫入不成功,該函式返回 FALSE 值. 2.檔名的路徑中必須為 // ,因為在VC++中, // 才表示一個 / . 3.也可將INI檔案放在程式所在目錄,此時 lpFileName 引數為: ".//student.ini". 4.從網頁中貼上原始碼時,最好先貼上至記事本中,再往VC中貼上,否則易造成編譯錯誤,開始時我也十分不解,好好的程式碼怎麼就不對呢?後來才找到這個方法.還有一些程式碼中使用了全形字元如:<,\等,也會 INI檔案程式設計 INI檔案在系統配置及應用程式引數儲存與設定方面,具有很重要的作用,所以視覺化的程式設計一族,如VB、VC、VFP、Delphi等都提供了讀寫INI檔案的方法,其中Delphi中操作INI檔案,最為簡潔,這是因為Delphi3提供了一個TInifile類,使我們可以非常靈活的處理INI檔案。 一、有必要了解INI檔案的結構: 三、開啟INI檔案
Filename:=ExtractFilePath(Paramstr(0))+'program.ini'; myinifile:=Tinifile.Create(filename); 四、讀取關鍵字的值 vs:=myinifile.Readstring('小節名','關鍵字',預設值); 其中預設值為該INI檔案不存在該關鍵字時返回的預設值。 五、寫入INI檔案 myinifile.writestring('小節名','關鍵字',變數或字串值); 七、小節操作 八、釋放 type implementation procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.FormDestroy(Sender: TObject); myinifile.writeinteger('程式引數','已執行時間',strtoint(edit2.text)); procedure TForm1.Timer1Timer(Sender: TObject); end. |