VC中操作INI文件的API
VC中操作INI文件的API
(1)操作系統(tǒng)配置文件Win.ini的函數(shù):
| 函數(shù)名 | 功能 |
| GetProfileSection | 讀取win.ini中指定節(jié)lpAppName中所有鍵名及其值。lpReturnedString字符串形式如下: Key1=Value1/0Key2=Value2/0…KeyN=ValueN/0/0 |
| GetProfileString | 讀取win.ini中指定節(jié)lpAppName中鍵名為lpKeyName對(duì)應(yīng)變量的字符串值。 |
| GetProfileInt | 讀取win.ini中指定節(jié)lpAppName中鍵名為lpKeyName對(duì)應(yīng)變量的整數(shù)值。 |
| ? | ? |
| WriteProfileSection | 寫(替換)win.ini中指定節(jié)lpAppName中的鍵值。 lpString字符串形式同GetProfileSection中的lpReturnedString。 |
| WriteProfileString | 寫(替換)win.ini中指定節(jié)lpAppName中鍵名為lpKeyName對(duì)應(yīng)變量的字符串值。 |
?
(2)操作用戶自定義配置文件(PrivateProfile.ini)的函數(shù):
| 函數(shù)名 | 功能 |
| GetPrivateProfileSectionNames | 讀取lpFileName指定的配置文件中所有的節(jié)名。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函數(shù)。
(2)Get系列讀取節(jié)鍵值,如果文件路徑有誤或節(jié)鍵名不對(duì)則返回設(shè)定的默認(rèn)值。
(3)訪存自定義配置文件時(shí),文件路徑lpFileName必須完整,文件名前面的各級(jí)目錄必須存在。如果lpFileName文件路徑不存在,則函數(shù)返回FALSE,GetLastError()?=?ERROR_PATH_NOT_FOUND。1.如果路徑正確,但是文件不存在,則該函數(shù)將先創(chuàng)建該文件。2.如果路徑及文件存在,則在現(xiàn)有ini文件基礎(chǔ)上進(jìn)行讀寫。3.如果?lpFileName?只指定文件名而沒有路徑的話,調(diào)用API將會(huì)去?Windows?的安裝目錄去查找而不會(huì)在當(dāng)前目錄查找。
(4)要對(duì)調(diào)用API的模塊(exe)所在目錄下進(jìn)行配置文件操作,可使用形如“.//config.ini”的相對(duì)路徑,注意轉(zhuǎn)義符。
(5)調(diào)用WritePrivateProfileSection,若參數(shù)三?lpString為NULL,則可將對(duì)應(yīng)section的全部內(nèi)容清空;調(diào)用WritePrivateProfileString,若參數(shù)三?lpString為NULL,則可將對(duì)應(yīng)key刪除。
?
鑒于XML的樹形描述層次結(jié)構(gòu)性清晰,現(xiàn)在很多軟件都大面積使用XML文件進(jìn)行配置,如QQ的全局配置文件C:/Program?Files/Tencent/QQ/gf-config.xml。java程序的配置文件基本都使用XML格式,C++中并沒有操作XML文件的標(biāo)準(zhǔn)庫。
//讀寫系統(tǒng)的INI
Windows都有C:\Windows\win.ini??本次操作就是讀寫此文件
1.?把信息寫入系統(tǒng)的win.ini文件
BOOL?WriteProfileString(
??????LPCTSTR?lpAppName,??//節(jié)的名字,是一個(gè)以0結(jié)束的字符串
??????LPCTSTR?lpKeyName,??//鍵的名字,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除整個(gè)節(jié)
??????LPCTSTR?lpString??????//鍵的值,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除對(duì)應(yīng)的鍵
)
//在win.ini中創(chuàng)建一個(gè)Test節(jié),并在該節(jié)中創(chuàng)建一個(gè)鍵id,其值為xym
::WriteProfileString("Test","id","xym");
2.?讀取字符串
DWORD?GetProfileString(
??????LPCTSTR?lpAppName,?????????//?節(jié)名
??????LPCTSTR?lpKeyName,?????????//?鍵名,讀取該鍵的值
??????LPCTSTR?lpDefault,???????????//?若指定的鍵不存在,該值作為讀取的默認(rèn)值
??????LPTSTR?lpReturnedString,??????//?一個(gè)指向緩沖區(qū)的指針,接收讀取的字符串
??????DWORD?nSize????????????????//?指定lpReturnedString指向的緩沖區(qū)的大小
)
CString?str;
::GetProfileString("Test","id","Error",str.GetBuffer(20),20);
3.?讀取整數(shù)
UINT?GetProfileInt(
??????LPCTSTR?lpAppName,??????//?節(jié)名
??????LPCTSTR?lpKeyName,??????//?鍵名,讀取該鍵的值
??????INT?nDefault??????????????//?若指定的鍵名不存在,該值作為讀取的默認(rèn)值
)
::WriteProfileString("Test","age","25");
int?age;
age=::GetProfileInt("Test","age",0);
4.?刪除鍵(值)
::WriteProfileString("Test",NULL,NULL);????//刪除win.ini中的Test節(jié)
::WriteProfileString("Test","id",NULL);??????//刪除win.ini中的id鍵
5.?寫值
BOOL?WriteProfileSection(?LPCTSTR?lpAppName,?//?section?name?LPCTSTR?lpString?//?data?buffer);
WriteProfileSection("1234567890","fdsgfdsg");
結(jié)果:
[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,??????//?節(jié)的名字,是一個(gè)以0結(jié)束的字符串
??????LPCTSTR?lpKeyName,??????//?鍵的名字,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除整個(gè)節(jié)
??????LPCTSTR?lpString,?????????//?鍵的值,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除對(duì)應(yīng)的鍵
??????LPCTSTR?lpFileName??????//?要寫入的文件的文件名。若該ini文件與程序在同一個(gè)目錄下,也可使用相對(duì)
???????????? ???//路徑,否則需要給出絕度路徑。
)
::WritePrivateProfileString("Test","id","xym","d://vc//Ex1//ex1.ini");
//在Ex1目錄下的ex1.ini中創(chuàng)建一個(gè)Test節(jié),并在該節(jié)中創(chuàng)建一個(gè)鍵id,其值為xym
?
//若Ex1.ini文件與讀寫該文件的程序在同一個(gè)目錄下,則上面語句也可寫為:
::WritePrivateProfileString("Test","id","xym",".//ex1.ini");
//::WritePrivateProfileString("Test","id","xym","ex1.ini");這樣寫的話會(huì)在windows目錄下生成配置文件
2.?讀取字符串
DWORD?GetPrivateProfileString(
??????LPCTSTR?lpAppName,???????????//??節(jié)名
??????LPCTSTR?lpKeyName,???????????//?鍵名,讀取該鍵的值
??????LPCTSTR?lpDefault,?????????????//?若指定的鍵不存在,該值作為讀取的默認(rèn)值
??????LPTSTR?lpReturnedString,????????//?一個(gè)指向緩沖區(qū)的指針,接收讀取的字符串
??????DWORD?nSize,?????????????????//?指定lpReturnedString指向的緩沖區(qū)的大小
??????LPCTSTR?lpFileName???????????//?讀取信息的文件名。若該ini文件與程序在同一個(gè)目錄下,也可使用相?????
????????????????????????????????????//對(duì)路徑,否則需要給出絕度路徑。
)
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.?讀取整數(shù)
UINT?GetPrivateProfileInt(
??????LPCTSTR?lpAppName,??????//?節(jié)的名字,是一個(gè)以0結(jié)束的字符串
??????LPCTSTR?lpKeyName,??????//?鍵名,讀取該鍵的值
??????INT?nDefault,??????????????//?若指定的鍵名不存在,該值作為讀取的默認(rèn)值
??????LPCTSTR?lpFileName???????//?要寫入的文件的文件名。若該ini文件與程序在同一個(gè)目錄下,也可使用相對(duì)
???//對(duì)路徑,否則需要給出絕度路徑。
)
::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節(jié)
::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",".//表情協(xié)議.ini");
結(jié)果:
[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,".//表情協(xié)議.ini");
7.GetPrivateProfileSectionNames函數(shù)
DWORD?GetPrivateProfileSectionNames(
??????LPTSTR?lpszReturnBuffer,?????????//?指向一個(gè)緩沖區(qū),用來保存返回的所有節(jié)名
??????DWORD?nSize,??????????????????//?參數(shù)lpszReturnBuffer的大小
??????LPCTSTR?lpFileName????????????//?文件名,若該ini文件與程序在同一個(gè)目錄下,
????????????????????????????????????//也可使用相對(duì)路徑,否則需要給出絕度路徑
)
CString?str;
GetPrivateProfileSectionNames(str.GetBuffer(256),256,".\\表情協(xié)議.ini");
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的VC中操作INI文件的API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。