本篇文章為大家展示了C++中怎么操作INI文件,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)恩施土家,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
1、存儲(chǔ)程序的初始化信息; 2、存儲(chǔ)需要保存的數(shù)據(jù)信息。
由節(jié)名、鍵名、鍵值組成。形式如下: [節(jié)名] 鍵名 = 鍵值
備注:一個(gè)INI文件,可以用多個(gè)節(jié)。
該函數(shù)用于向INI文件中寫入一個(gè)字符串?dāng)?shù)據(jù)。
函數(shù)原型如下:
BOOL WritePrivateProfileString( LPCTSTR lpAppName, // pointer to section name LPCTSTR lpKeyName, // pointer to key name LPCTSTR lpString, // pointer to string to add LPCTSTR lpFileName // pointer to initialization filename);
參數(shù)說明:
lpAppName:指定節(jié)名,以空終止結(jié)尾的字符串。如果INI文件中節(jié)名不存在,將創(chuàng)建一個(gè)節(jié)名。 lpKeyName:鍵名,以空終止結(jié)尾的字符串。如果INI文件中該鍵名不存在,將創(chuàng)建一個(gè)鍵名。如果該參數(shù)為NULL,包括節(jié)及節(jié)下的所有項(xiàng)目都將被刪除。 lpString:寫到鍵值中的數(shù)據(jù),以空終止結(jié)尾的字符串。 lpFileName:INI文件的名稱,以空終止結(jié)尾的字符串。指定需要寫入數(shù)據(jù)的INI文件,如果指定的INI文件不存在將創(chuàng)建。
返回值:
如果函數(shù)成功將字符串復(fù)制到初始化文件,返回值是非零。 如果函數(shù)失敗,刷新緩存版本的最近訪問初始化文件,返回值是零。
該函數(shù)用于獲取INI文件中的鍵值。 函數(shù)原型如下:
DWORD GetPrivateProfileString( LPCTSTR lpAppName, // points to section name LPCTSTR lpKeyName, // points to key name LPCTSTR lpDefault, // points to default string LPTSTR lpReturnedString, // points to destination buffer DWORD nSize, // size of destination buffer LPCTSTR lpFileName // points to initialization filename);
參數(shù)說明:
lpAppName:指定節(jié)名,以空終止結(jié)尾的字符串。如果該參數(shù)為NULL,函數(shù)將復(fù)制所有的節(jié)名到所指定的緩沖區(qū)中。 lpKeyName:鍵名,以空終止結(jié)尾的字符串。如果該參數(shù)為NULL,函數(shù)將lpAppName節(jié)下所有的鍵名復(fù)制到lpReturnedString緩沖區(qū)。 lpDefault:默認(rèn)值,以空終止結(jié)尾的字符串。如果獲取鍵值的鍵名不存在時(shí),返回設(shè)置的默認(rèn)值。 lpReturnedString:用于接受數(shù)據(jù)的緩沖區(qū)。 nSize:以字符為單位表示lpReturnedString緩沖區(qū)的大小。 lpFileName:INI文件名稱,以空終止結(jié)尾的字符串。
返回值: 返回值是字符復(fù)制到緩沖區(qū)的數(shù)量,不包括終止null字符。
該函數(shù)用于從INI文件中獲取整型數(shù)據(jù)。 函數(shù)原型如下:
UINT GetPrivateProfileInt( LPCTSTR lpAppName, // address of section name LPCTSTR lpKeyName, // address of key name INT nDefault, // return value if key name is not found LPCTSTR lpFileName // address of initialization filename);
參數(shù)說明: lpAppName:節(jié)名。 lpKeyName:鍵名。 nDefault:默認(rèn)值。 lpFileName:INI文件名稱。
返回值:
函數(shù)返回實(shí)際讀取的整數(shù)值。
該函數(shù)用于返回INI文件中的所有節(jié)名。 函數(shù)原型如下:
DWORD GetPrivateProfileSectionNames( LPTSTR lpszReturnBuffer, // address of return buffer DWORD nSize, // size of return buffer LPCTSTR lpFileName // address of initialization filename);
參數(shù)說明: lpszReturnBuffer:接受節(jié)名的數(shù)據(jù)緩沖區(qū)。 nSize:緩沖區(qū)的大小。 lpFileName:INI文件名稱。 返回值: 返回值指定數(shù)量的字符復(fù)制到指定的緩沖,不包括終止null字符。 如果緩沖區(qū)沒有大到足以包含所有相關(guān)的部分名稱指定的初始化文件,返回值等于指定的長(zhǎng)度nSize - 2。
該函數(shù)用于獲取指定節(jié)下的所有的鍵名和鍵值。 函數(shù)原型如下:
DWORD GetPrivateProfileSection( LPCTSTR lpAppName, // address of section name LPTSTR lpReturnedString, // address of return buffer DWORD nSize, // size of return buffer LPCTSTR lpFileName // address of initialization filename);
參數(shù)說明:
lpAppName:節(jié)名。 lpReturnedString:用于接受數(shù)據(jù)的緩沖區(qū)。 nSize:緩沖區(qū)的大小。 lpFileName:INI文件名稱。 返回值: 返回值指定數(shù)量的字符復(fù)制到緩沖區(qū),不包括終止null字符。 如果緩沖區(qū)沒有大到足以包含所有與指定相關(guān)聯(lián)的鍵名稱和值對(duì)部分,返回值等于nSize - 2。
CMyINI.h
#pragma once#include <iostream>#include <fstream>#include <sstream>#include <vector>#include <cstdlib>#include <map> using namespace std; //INI文件結(jié)點(diǎn)存儲(chǔ)結(jié)構(gòu)class ININode{public:ININode(string root, string key, string value){this->root = root;this->key = key;this->value = value;}string root;string key;string value;}; //鍵值對(duì)結(jié)構(gòu)體class SubNode{public:void InsertElement(string key, string value){sub_node.insert(pair<string, string>(key, value));}map<string, string> sub_node;}; //INI文件操作類class CMyINI{public:CMyINI();~CMyINI(); public:int ReadINI(string path);//讀取INI文件string GetValue(string root, string key);//由根結(jié)點(diǎn)和鍵獲取值vector<ININode>::size_type GetSize(){ return map_ini.size(); }//獲取INI文件的結(jié)點(diǎn)數(shù)vector<ININode>::size_type SetValue(string root, string key, string value);//設(shè)置根結(jié)點(diǎn)和鍵獲取值int WriteINI(string path);//寫入INI文件void Clear(){ map_ini.clear(); }//清空void Travel();//遍歷打印INI文件private:map<string, SubNode> map_ini;//INI文件內(nèi)容的存儲(chǔ)變量};
CMyINI.cpp
#include "StdAfx.h"#include "MyINI.h" #define INIDEBUG CMyINI::CMyINI(){} CMyINI::~CMyINI(){} //************************************************************************// 函數(shù)名稱: TrimString// 訪問權(quán)限: public // 創(chuàng)建日期:2017/01/05// 創(chuàng) 建 人:// 函數(shù)說明:去除空格// 函數(shù)參數(shù): string & str輸入的字符串// 返 回 值: std::string &結(jié)果字符串//************************************************************************string &TrimString(string &str){string::size_type pos = 0;while (str.npos != (pos = str.find(" ")))str = str.replace(pos, pos + 1, "");return str;} //************************************************************************// 函數(shù)名稱: ReadINI// 訪問權(quán)限: public // 創(chuàng)建日期:2017/01/05// 創(chuàng) 建 人:// 函數(shù)說明:讀取INI文件,并將其保存到map結(jié)構(gòu)中// 函數(shù)參數(shù): string pathINI文件的路徑// 返 回 值: int//************************************************************************int CMyINI::ReadINI(string path){ifstream in_conf_file(path.c_str());if (!in_conf_file) return 0;string str_line = "";string str_root = "";vector<ININode> vec_ini;while (getline(in_conf_file, str_line)){string::size_type left_pos = 0;string::size_type right_pos = 0;string::size_type equal_p_pos = 0;string str_key = "";string str_value = "";if ((str_line.npos != (left_pos = str_line.find("["))) && (str_line.npos != (right_pos = str_line.find("]")))){//cout << str_line.substr(left_pos+1, right_pos-1) << endl;str_root = str_line.substr(left_pos + 1, right_pos - 1);} if (str_line.npos != (equal_p_pos = str_line.find("="))){str_key = str_line.substr(0, equal_p_pos);str_value = str_line.substr(equal_p_pos + 1, str_line.size() - 1);str_key = TrimString(str_key);str_value = TrimString(str_value);//cout << str_key << "=" << str_value << endl;} if ((!str_root.empty()) && (!str_key.empty()) && (!str_value.empty())){ININode ini_node(str_root, str_key, str_value);vec_ini.push_back(ini_node);//cout << vec_ini.size() << endl;}}in_conf_file.close();in_conf_file.clear(); //vector convert to mapmap<string, string> map_tmp;for (vector<ININode>::iterator itr = vec_ini.begin(); itr != vec_ini.end(); ++itr){map_tmp.insert(pair<string, string>(itr->root, ""));}//提取出根節(jié)點(diǎn)for (map<string, string>::iterator itr = map_tmp.begin(); itr != map_tmp.end(); ++itr){#ifdef INIDEBUGcout << "根節(jié)點(diǎn): " << itr->first << endl;#endif//INIDEBUGSubNode sn;for (vector<ININode>::iterator sub_itr = vec_ini.begin(); sub_itr != vec_ini.end(); ++sub_itr){if (sub_itr->root == itr->first){#ifdef INIDEBUGcout << "鍵值對(duì): " << sub_itr->key << "=" << sub_itr->value << endl;#endif//INIDEBUGsn.InsertElement(sub_itr->key, sub_itr->value);}}map_ini.insert(pair<string, SubNode>(itr->first, sn));}return 1;} //************************************************************************// 函數(shù)名稱: GetValue// 訪問權(quán)限: public // 創(chuàng)建日期:2017/01/05// 創(chuàng) 建 人:// 函數(shù)說明:根據(jù)給出的根結(jié)點(diǎn)和鍵值查找配置項(xiàng)的值// 函數(shù)參數(shù): string root配置項(xiàng)的根結(jié)點(diǎn)// 函數(shù)參數(shù): string key配置項(xiàng)的鍵// 返 回 值: std::string配置項(xiàng)的值//************************************************************************string CMyINI::GetValue(string root, string key){map<string, SubNode>::iterator itr = map_ini.find(root);map<string, string>::iterator sub_itr = itr->second.sub_node.find(key);if (!(sub_itr->second).empty())return sub_itr->second;return "";} //************************************************************************// 函數(shù)名稱: WriteINI// 訪問權(quán)限: public // 創(chuàng)建日期:2017/01/05// 創(chuàng) 建 人:// 函數(shù)說明:保存XML的信息到文件中// 函數(shù)參數(shù): string pathINI文件的保存路徑// 返 回 值: int//************************************************************************int CMyINI::WriteINI(string path){ofstream out_conf_file(path.c_str());if (!out_conf_file)return -1;//cout << map_ini.size() << endl;for (map<string, SubNode>::iterator itr = map_ini.begin(); itr != map_ini.end(); ++itr){//cout << itr->first << endl;out_conf_file << "[" << itr->first << "]" << endl;for (map<string, string>::iterator sub_itr = itr->second.sub_node.begin(); sub_itr != itr->second.sub_node.end(); ++sub_itr){//cout << sub_itr->first << "=" << sub_itr->second << endl;out_conf_file << sub_itr->first << "=" << sub_itr->second << endl;}} out_conf_file.close();out_conf_file.clear(); return 1;} //************************************************************************// 函數(shù)名稱: SetValue// 訪問權(quán)限: public // 創(chuàng)建日期:2017/01/05// 創(chuàng) 建 人:// 函數(shù)說明:設(shè)置配置項(xiàng)的值// 函數(shù)參數(shù): string root配置項(xiàng)的根節(jié)點(diǎn)// 函數(shù)參數(shù): string key配置項(xiàng)的鍵// 函數(shù)參數(shù): string value配置項(xiàng)的值// 返 回 值: std::vector<ININode>::size_type//************************************************************************vector<ININode>::size_type CMyINI::SetValue(string root, string key, string value){map<string, SubNode>::iterator itr = map_ini.find(root);//查找if (map_ini.end() != itr){//itr->second.sub_node.insert(pair<string, string>(key, value));itr->second.sub_node[key] = value;}//根節(jié)點(diǎn)已經(jīng)存在了,更新值else{SubNode sn;sn.InsertElement(key, value);map_ini.insert(pair<string, SubNode>(root, sn));}//根節(jié)點(diǎn)不存在,添加值 return map_ini.size();} //************************************************************************// 函數(shù)名稱: Travel// 訪問權(quán)限: public // 創(chuàng)建日期:2017/01/05// 創(chuàng) 建 人:// 函數(shù)說明:遍歷打印INI文件// 返 回 值: void//************************************************************************void CMyINI::Travel(){for (map<string, SubNode>::iterator itr = this->map_ini.begin(); itr!= this->map_ini.end(); ++itr){//rootcout << "[" << itr->first << "]" << endl;for (map<string, string>::iterator itr1=itr->second.sub_node.begin(); itr1!=itr->second.sub_node.end();++itr1){cout << " " << itr1->first << " = " << itr1->second << endl;}}}
測(cè)試之前INI文件的內(nèi)容:
測(cè)試程序:
CMyINI *p = new CMyINI();p->ReadINI("Setting.ini");cout << "\n原始INI文件內(nèi)容:" << std::endl;p->Travel();p->SetValue("setting", "hehe", "eheh");cout << "\n增加節(jié)點(diǎn)之后的內(nèi)容:" << std::endl;p->Travel();cout << "\n修改節(jié)點(diǎn)之后的內(nèi)容:" << std::endl;p->SetValue("kk", "kk", "2");p->Travel();p->WriteINI("Setting.ini");
測(cè)試結(jié)果:
ini文件是由若干個(gè)節(jié)(Sction)組成,每個(gè)節(jié)又由若干個(gè)鍵(Key)組成。1、將文件寫入ini文件中,主要使用的函數(shù)是WritePrivateProfileString(LPCWSTR IpAppName,LPCWSTR IpKeyName,LPCWSTR IpString,LPCWSTR IpFileName);參數(shù)一表示節(jié)的名字,參數(shù)二表示鍵的名字,若為NULL,則刪除整個(gè)節(jié),參數(shù)三表示鍵的值,若為NULL,則刪除這個(gè)鍵,參數(shù)四表示文件名。
#ifndef CONFIG_FILE#define CONFIG_FILE (_T("Config.ini"))#endifTCHAR IniPath[MAX_PATH]={0}GetModuleFileName(NULL,IniPath,Max_Path); TCHAR *pFind=_tcsrchr(IniPath,'\\');if(pFind==NULL){return;}*pFind='';CString newIniPath=IniPath;newIniPath+="\\";newIniPath+=CONFIG_FILE;
寫入........
2、將ini文件中的配置信息讀取出來,主要使用的函數(shù)為GetPrivateProfileString(LPCWSTR IpAppName,LPCWSTR IpKeyName,LPCWSTR IpDefault,LPCWSTR IpReturnedString,DWORD nSize,LPCWSTR IpFileName)和GetPrivateProfileInt(LPCWSTR IpAppName,LPCWSTR IpKeyName,Int nDefault,LPCWSTR IpFileName);GetPrivateProfileString:參數(shù)一表示節(jié)的名字,參數(shù)二表示鍵的名字,參數(shù)三表示如果指定的鍵名不存在時(shí)所默認(rèn)的讀取值,參數(shù)四用來接收讀取的字符串,參數(shù)五指定lpReturnedString指向的緩沖區(qū)的大小 ,參數(shù)六表示文件名。GetPrivateProfileInt:參數(shù)一表示節(jié)的名字,參數(shù)二表示鍵的名字,參數(shù)三表示如果指定的鍵名不存在時(shí)所默認(rèn)的讀取值,參數(shù)四表示文件名。
TCHAR IniPath[MAX_PATH]={0};GetModuleFileName(NULL,IniPath,Max_Path);IniPath[_tcslen(IniPath)-1]='i'IniPath[_tcslen(IniPath)-2]='n'IniPath[_tcslen(IniPath)-3]='i'if(!PathFileExists(IniPath)){}
上述內(nèi)容就是C++中怎么操作INI文件,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標(biāo)題:C++中怎么操作INI文件
當(dāng)前路徑:http://muchs.cn/article0/iejdio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、外貿(mào)建站、企業(yè)網(wǎng)站制作、網(wǎng)站改版、域名注冊(cè)、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)