VC中操作INI文件的API
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。1.如果路徑正確,但是文件不存在,則該函數將先創建該文件。2.如果路徑及文件存在,則在現有ini文件基礎上進行讀寫。3.如果?lpFileName?只指定文件名而沒有路徑的話,調用API將會去?Windows?的安裝目錄去查找而不會在當前目錄查找。
(4)要對調用API的模塊(exe)所在目錄下進行配置文件操作,可使用形如“.//config.ini”的相對路徑,注意轉義符。
(5)調用WritePrivateProfileSection,若參數三?lpString為NULL,則可將對應section的全部內容清空;調用WritePrivateProfileString,若參數三?lpString為NULL,則可將對應key刪除。
?
鑒于XML的樹形描述層次結構性清晰,現在很多軟件都大面積使用XML文件進行配置,如QQ的全局配置文件C:/Program?Files/Tencent/QQ/gf-config.xml。java程序的配置文件基本都使用XML格式,C++中并沒有操作XML文件的標準庫。
//讀寫系統的INI
Windows都有C:\Windows\win.ini??本次操作就是讀寫此文件
1.?把信息寫入系統的win.ini文件
BOOL?WriteProfileString(
??????LPCTSTR?lpAppName,??//節的名字,是一個以0結束的字符串
??????LPCTSTR?lpKeyName,??//鍵的名字,是一個以0結束的字符串。若為NULL,則刪除整個節
??????LPCTSTR?lpString??????//鍵的值,是一個以0結束的字符串。若為NULL,則刪除對應的鍵
)
//在win.ini中創建一個Test節,并在該節中創建一個鍵id,其值為xym
::WriteProfileString("Test","id","xym");
2.?讀取字符串
DWORD?GetProfileString(
??????LPCTSTR?lpAppName,?????????//?節名
??????LPCTSTR?lpKeyName,?????????//?鍵名,讀取該鍵的值
??????LPCTSTR?lpDefault,???????????//?若指定的鍵不存在,該值作為讀取的默認值
??????LPTSTR?lpReturnedString,??????//?一個指向緩沖區的指針,接收讀取的字符串
??????DWORD?nSize????????????????//?指定lpReturnedString指向的緩沖區的大小
)
CString?str;
::GetProfileString("Test","id","Error",str.GetBuffer(20),20);
3.?讀取整數
UINT?GetProfileInt(
??????LPCTSTR?lpAppName,??????//?節名
??????LPCTSTR?lpKeyName,??????//?鍵名,讀取該鍵的值
??????INT?nDefault??????????????//?若指定的鍵名不存在,該值作為讀取的默認值
)
::WriteProfileString("Test","age","25");
int?age;
age=::GetProfileInt("Test","age",0);
4.?刪除鍵(值)
::WriteProfileString("Test",NULL,NULL);????//刪除win.ini中的Test節
::WriteProfileString("Test","id",NULL);??????//刪除win.ini中的id鍵
5.?寫值
BOOL?WriteProfileSection(?LPCTSTR?lpAppName,?//?section?name?LPCTSTR?lpString?//?data?buffer);
WriteProfileSection("1234567890","fdsgfdsg");
結果:
[1234567890]
Fdsgfdsg
6.?讀值
DWORD?GetProfileSection(?LPCTSTR?lpAppName,?//?section?name?LPTSTR?lpReturnedString,?//?return?buffer?DWORD?nSize?//?size?of?return?buffer);
CString?str;
GetProfileSection("1234567890",str.GetBuffer(256),256);
///讀寫用戶自定義的INI
1.?把信息寫入用戶的win.ini文件
BOOL?WritePrivateProfileString(
??????LPCTSTR?lpAppName,??????//?節的名字,是一個以0結束的字符串
??????LPCTSTR?lpKeyName,??????//?鍵的名字,是一個以0結束的字符串。若為NULL,則刪除整個節
??????LPCTSTR?lpString,?????????//?鍵的值,是一個以0結束的字符串。若為NULL,則刪除對應的鍵
??????LPCTSTR?lpFileName??????//?要寫入的文件的文件名。若該ini文件與程序在同一個目錄下,也可使用相對
???????????? ???//路徑,否則需要給出絕度路徑。
)
::WritePrivateProfileString("Test","id","xym","d://vc//Ex1//ex1.ini");
//在Ex1目錄下的ex1.ini中創建一個Test節,并在該節中創建一個鍵id,其值為xym
?
//若Ex1.ini文件與讀寫該文件的程序在同一個目錄下,則上面語句也可寫為:
::WritePrivateProfileString("Test","id","xym",".//ex1.ini");
//::WritePrivateProfileString("Test","id","xym","ex1.ini");這樣寫的話會在windows目錄下生成配置文件
2.?讀取字符串
DWORD?GetPrivateProfileString(
??????LPCTSTR?lpAppName,???????????//??節名
??????LPCTSTR?lpKeyName,???????????//?鍵名,讀取該鍵的值
??????LPCTSTR?lpDefault,?????????????//?若指定的鍵不存在,該值作為讀取的默認值
??????LPTSTR?lpReturnedString,????????//?一個指向緩沖區的指針,接收讀取的字符串
??????DWORD?nSize,?????????????????//?指定lpReturnedString指向的緩沖區的大小
??????LPCTSTR?lpFileName???????????//?讀取信息的文件名。若該ini文件與程序在同一個目錄下,也可使用相?????
????????????????????????????????????//對路徑,否則需要給出絕度路徑。
)
CString?str;
::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,".//ex1.ini");
或:
::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,"d://vc//Ex1//ex1.ini");
3.?讀取整數
UINT?GetPrivateProfileInt(
??????LPCTSTR?lpAppName,??????//?節的名字,是一個以0結束的字符串
??????LPCTSTR?lpKeyName,??????//?鍵名,讀取該鍵的值
??????INT?nDefault,??????????????//?若指定的鍵名不存在,該值作為讀取的默認值
??????LPCTSTR?lpFileName???????//?要寫入的文件的文件名。若該ini文件與程序在同一個目錄下,也可使用相對
???//對路徑,否則需要給出絕度路徑。
)
::WritePrivateProfileString("Test","age","25",".//ex1.ini");
int?age;
age=::GetPrivateProfileInt("Test","age",0,".//ex1.ini");
4.?刪除鍵(值)
::WritePrivateProfileString("Test",NULL,NULL,".//ex1.ini");??????//刪除ex1.ini中的Test節
::WritePrivateProfileString("Test","id",NULL,".//ex1.ini");???????//刪除ex1.ini中的id鍵
5.寫值
BOOL?WritePrivateProfileSection(?LPCTSTR?lpAppName,?//?section?name?LPCTSTR?lpString,?//?data?LPCTSTR?lpFileName?//?file?name?);
WritePrivateProfileSection("1234567890","fdsgfdsg",".//表情協議.ini");
結果:
[1234567890]
Fdsgfdsg
6.?讀值
DWORD?GetPrivateProfileSection(?LPCTSTR?lpAppName,?//?section?name?LPTSTR?lpReturnedString,?//?return?buffer?DWORD?nSize,?//?size?of?return?buffer?LPCTSTR?lpFileName?//?initialization?file?name?);
CString?str;
GetPrivateProfileSection("1234567890",str.GetBuffer(256),256,".//表情協議.ini");
7.GetPrivateProfileSectionNames函數
DWORD?GetPrivateProfileSectionNames(
??????LPTSTR?lpszReturnBuffer,?????????//?指向一個緩沖區,用來保存返回的所有節名
??????DWORD?nSize,??????????????????//?參數lpszReturnBuffer的大小
??????LPCTSTR?lpFileName????????????//?文件名,若該ini文件與程序在同一個目錄下,
????????????????????????????????????//也可使用相對路徑,否則需要給出絕度路徑
)
CString?str;
GetPrivateProfileSectionNames(str.GetBuffer(256),256,".\\表情協議.ini");
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的VC中操作INI文件的API的全部內容,希望文章能夠幫你解決所遇到的問題。