聲明
Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
說明
為初始化檔案中指定的條目獲取它的整數值。
UINT WINAPI GetPrivateProfileInt
(
_In_LPCTSTR lpAppName, //The name of the section in the initialization file.
_In_LPCTSTR lpKeyName, //The name of the key whose value is to be retrieved.
_In_INT nDefault, //The default value to return if the key name cannot be found in the initialization file.
_In_LPCTSTR lpFileName //The name of the initialization file
);
返回值
Long,找到的條目的值;如指定的條目未找到,就返回
默認值。如找到的數字不是一個合法的整數,函式會返回其中合法的一部分。如,對於“xyz=55zz”這個條目,函式返回55。這個函式也能理解採用標準C語言格式的十六進制數字:用0x作為一個
十六進制數字的前綴——所以0x55ab等價於vb的&H55AB
參數表
lpApplicationName String,指定在其中查找條目的小節。注意這個字串是不區分大小寫的
lpKeyName String,欲獲取的設定項或條目。這個支持不區分大小寫
nDefault Long,指定條目未找到時返回的默認值
lpFileName String,初始化檔案的名字。如果沒有指定完整的路徑名,windows就會在Windows目錄中搜尋檔案
註解
在Windows NT中,有些初始化檔案實際是在
註冊表中。可在註冊表的下面這個項處找到這些檔案的一個列表:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping
UINT GetPrivateProfileInt
(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);
使用方法如下:
BOOL WritePrivateProfileString
(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);
CString strTemp,strTempA;
int i;
int nCount=6; //共有6個檔案名稱需要保存
for(i=0;i {strTemp.Format("%d",i);
strTempA=檔案名稱; //檔案名稱可以從數組,列表框等處取得.
"c:\\usefile\\usefile.ini");
strTemp.Format("%d",nCount);
//將檔案總數寫入,以便讀出.
UINT GetPrivateProfileInt
(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);
其中各參數的意義:LPCTSTR lpAppName 是INI檔案中的一個欄位名.LPCTSTR lpKeyName 是lpAppName下的一個鍵名,通俗講就是變數名.LPCTSTR lpString 是鍵值,也就是變數的值,不過必須為LPCTSTR型或CString型的.LPCTSTR lpFileName 是完整的INI檔案名稱.
方法
nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");
BOOL Write Private Profile String (LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);
CString strTemp,strTempA;
int i;
int nCount=6; //共有6個檔案名稱需要保存
for(i=0;i {strTemp.Format("%d",i);
strTempA=檔案名稱; //檔案名稱可以從數組,列表框等處取得.
::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,
"c:\\usefile\\usefile.ini");
}
strTemp.Format("%d",nCount);
::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");
//將檔案總數寫入,以便讀出.
配置檔案中經常用到ini檔案,在VC中其函式分別為:
寫入.ini檔案:bool WritePrivateProfileString (LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);
讀取.ini檔案:DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefaut,LPSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);
讀取整形值:UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);
其中個參數的意思:
LPCTSTR lpAppName ------- INI檔案中的一個欄位名
LPCTSTR lpKeyName -------- lpAppName 下的一個鍵名,也就是裡面具體的變數名
LPCTSTR lpString ---------是鍵值,也就是變數的值,必須為LPCTSTR或CString類型
LPCTSTR lpFileName --------完整的INI檔案路徑名
LPCTSTR lpDefaut ----------如果沒有其前兩個參數值,則將此值賦給變數
LPSTR lpReturnedString --------接收INI檔案中的值的CString對象,即接收緩衝區
DWORD nSize ------接收
緩衝區的大小
例子:
CString StrName,Strtemp;
int nAge;
StrName = "jacky";
nAge = 13;
WritePrivateProfileString("Student","Name",StrName,"c:\\setting.ini");
結果:(INI檔案中顯示如下:)
[Student]
Name=jacky
讀取:
CString SName;
GetPrivateProfileString("Student","Name","DefaultName",SName.GetBuffer(MAX_LENGTH),MAX_LENGTH,"c:\\setting.ini");
結果:SName = "jacky";這裡需要注意點就是用完GetBuffer函式後一定要釋放(用SName.ReleaseBuffer()函式),不然後面再用到SName的其他子函式就會失靈。
讀整數比較簡單,如下
int Result = GetPrivateProfileInt("Student","nAge",0,"c:\\setting.ini")返回值即為所讀取的結果!
在GetPrivateProfileString最後一個參數是配置檔案路徑的參數,此路徑只能是絕對路徑,不能是相對路徑,但需要exe檔案能和配置檔案在一起。因此使用了GetCurrentDirectory函式。
例程
CString server_ip;CString des="";::GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));des.ReleaseBuffer();des+="\\config.ini";GetPrivateProfileString("PhoneDemo",\ "Server_IP",\ "",\ server_ip.GetBufferSetLength(15),\ 15,\ des);server_ip.ReleaseBuffer();
在這裡使用CString變數時,在使用完GetBuffer後,緊接著一定要使用ReleaseBuffer()函式,才可以進行其他的諸如字元串+操作