真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ini文件的讀取

ini.h代碼

公司主營業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出蘭陵免費(fèi)做網(wǎng)站回饋大家。

#ifndef INI_H

#define INI_H

#include

#include

using namespace std;

#define CONFIGLEN           256 

enum INI_RES

{

INI_SUCCESS,            //成功

INI_ERROR,              //普通錯(cuò)誤

INI_OPENFILE_ERROR,     //打開文件失敗

INI_NO_ATTR            //無對(duì)應(yīng)的鍵值

};

//              子鍵索引    子鍵值 

typedef map KEYMAP;

//              主鍵索引 主鍵值  

typedef map MAINKEYMAP;

// config 文件的基本操作類

class CIni

{

public:

// 構(gòu)造函數(shù)

CIni();

// 析夠函數(shù)

virtual ~CIni();

public:

//獲取×××的鍵值

int  GetInt(const char* mAttr, const char* cAttr);

//獲取鍵值的字符串

char *GetStr(const char* mAttr, const char* cAttr);

// 打開config 文件

INI_RES OpenFile(const char* pathName, const char* type);

// 關(guān)閉config 文件

INI_RES CloseFile();

protected:

// 讀取config文件

INI_RES GetKey(const char* mAttr, const char* cAttr, char* value);

protected:

// 被打開的文件局柄

FILE* m_fp;

char  m_szKey[CONFIGLEN];

MAINKEYMAP m_Map;

};

#endif

ini.cpp代碼

#include "ini.h"

/******************************************************************************

* 功  能:構(gòu)造函數(shù)

* 參  數(shù):無

* 返回值:無

* 備  注:

******************************************************************************/

CIni::CIni()

{

memset(m_szKey, 0, sizeof(m_szKey));

m_fp = NULL;

}

/******************************************************************************

* 功  能:析構(gòu)函數(shù)

* 參  數(shù):無

* 返回值:無

* 備  注:

******************************************************************************/

CIni::~CIni()

{

m_Map.clear();

}

/******************************************************************************

* 功  能:打開文件函數(shù)

* 參  數(shù):無

* 返回值:

* 備  注:

******************************************************************************/

INI_RES CIni::OpenFile(const char* pathName, const char* type)

{

string szLine, szMainKey, szLastMainKey, szSubKey;

char strLine[CONFIGLEN] = { 0 };

KEYMAP mLastMap;

int  nIndexPos = -1;

int  nLeftPos = -1;

int  nRightPos = -1;

m_fp = fopen(pathName, type);

if (m_fp == NULL)

{

printf("open inifile %s error!\n", pathName);

return INI_OPENFILE_ERROR;

}

m_Map.clear();

while (fgets(strLine, CONFIGLEN, m_fp))

{

szLine.assign(strLine);

//刪除字符串中的非必要字符

nLeftPos = szLine.find("\n");

if (string::npos != nLeftPos)

{

szLine.erase(nLeftPos, 1);

}

nLeftPos = szLine.find("\r");

if (string::npos != nLeftPos)

{

szLine.erase(nLeftPos, 1);

}

//判斷是否是主鍵

nLeftPos = szLine.find("[");

nRightPos = szLine.find("]");

if (nLeftPos != string::npos && nRightPos != string::npos)

{

szLine.erase(nLeftPos, 1);

nRightPos--;

szLine.erase(nRightPos, 1);

m_Map[szLastMainKey] = mLastMap;

mLastMap.clear();

szLastMainKey = szLine;

}

else

{

//是否是子鍵

if (nIndexPos = szLine.find("="), string::npos != nIndexPos)

{

string szSubKey, szSubValue;

szSubKey = szLine.substr(0, nIndexPos);

szSubValue = szLine.substr(nIndexPos + 1, szLine.length() - nIndexPos - 1);

mLastMap[szSubKey] = szSubValue;

}

else

{

//TODO:不符合ini鍵值模板的內(nèi)容 如注釋等

}

}

}

//插入最后一次主鍵

m_Map[szLastMainKey] = mLastMap;

return INI_SUCCESS;

}

/******************************************************************************

* 功  能:關(guān)閉文件函數(shù)

* 參  數(shù):無

* 返回值:

* 備  注:

******************************************************************************/

INI_RES CIni::CloseFile()

{

if (m_fp != NULL)

{

fclose(m_fp);

m_fp = NULL;

}

return INI_SUCCESS;

}

/******************************************************************************

* 功  能:獲取[SECTION]下的某一個(gè)鍵值的字符串

* 參  數(shù):

*  char* mAttr  輸入?yún)?shù)    主鍵

*  char* cAttr  輸入?yún)?shù) 子鍵

*  char* value  輸出參數(shù) 子鍵鍵值

* 返回值:

* 備  注:

******************************************************************************/

INI_RES CIni::GetKey(const char* mAttr, const char* cAttr, char* pValue)

{

KEYMAP mKey = m_Map[mAttr];

string sTemp = mKey[cAttr];

strcpy(pValue, sTemp.c_str());

return INI_SUCCESS;

}

/******************************************************************************

* 功  能:獲取×××的鍵值

* 參  數(shù):

*       cAttr                     主鍵

*      cAttr                     子鍵

* 返回值:正常則返回對(duì)應(yīng)的數(shù)值 未讀取成功則返回0(鍵值本身為0不沖突)

* 備  注:

******************************************************************************/

int CIni::GetInt(const char* mAttr, const char* cAttr)

{

int nRes = 0;

memset(m_szKey, 0, sizeof(m_szKey));

if (INI_SUCCESS == GetKey(mAttr, cAttr, m_szKey))

{

nRes = atoi(m_szKey);

}

return nRes;

}

/******************************************************************************

* 功  能:獲取鍵值的字符串

* 參  數(shù):

*       cAttr                     主鍵

*      cAttr                     子鍵

* 返回值:正常則返回讀取到的子鍵字符串 未讀取成功則返回"NULL"

* 備  注:

******************************************************************************/

char *CIni::GetStr(const char* mAttr, const char* cAttr)

{

memset(m_szKey, 0, sizeof(m_szKey));

if (INI_SUCCESS != GetKey(mAttr, cAttr, m_szKey))

{

strcpy(m_szKey, "NULL");

}

return m_szKey;

}

config.ini

[cctv.thrift]

IP=192.168.37.123

Port=7001

username=admin

password=admin

測試

static void ReadIniFile()

{

CIni  ini;

ini.OpenFile("config.ini", "r");

char *pVal1 = ini.GetStr("cctv.thrift", "IP");

int  nKey = ini.GetInt("cctv.thrift", "Port");

}

注意

    GetStr返回的字符串,必須馬上保存到其他的變量中,如果這個(gè)時(shí)候重新調(diào)用GetInt,上面的pVal1的值將會(huì)改變


網(wǎng)頁題目:ini文件的讀取
URL鏈接:http://weahome.cn/article/jpdgid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部