获取ini文件中某个section的所有Key和Value

// test12.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "Windows.h"
#include "iostream"
using namespace std;

/* 
    解决_tprintf中文打印乱码
*/
#include <locale.h> 


/*
   功能:定义一个结构体存放Key的名字和数量.
*/
#define Num 15
struct _KEYNAME
{
	TCHAR szKeyBuf[Num][MAX_PATH];
	int nKeyNum;

	_KEYNAME()
	{
		memset(szKeyBuf,'0x0',sizeof(szKeyBuf)/sizeof(TCHAR));
		nKeyNum = 0;
	}
};
struct  _KEYNAME gKeyName;

/* 
    功能:获取配置文件某个Section中的Key值和Key的总个数.
*/
int GetKeyName(int nLen,TCHAR* szBuf)
{
	int nIndex(0),nNum(0);

	if(nLen == 0 || sizeof(szBuf) == 0)
		return 0;

	for (int nPos = 0;nPos < nLen;nPos++)
	{
		if (szBuf[nPos] != _T('\0'))
		{
			gKeyName.szKeyBuf[nNum][nIndex++] = szBuf[nPos];
		} 
		else
		{
			gKeyName.szKeyBuf[nNum][nIndex] = _T('\0');
			nNum++;
			nIndex = 0;
		}
	}

	gKeyName.nKeyNum = nNum;

	return nNum;
}

/*
   获取Key对应的值.
*/
int GetKeyValue(TCHAR szValue[][MAX_PATH],struct _KEYNAME KeyName,TCHAR* szSection,TCHAR* szIniPath)
{
	int nKeyNum = KeyName.nKeyNum;

	for (int i = 0;i < nKeyNum;i++)
	{
		GetPrivateProfileString(szSection,KeyName.szKeyBuf[i],_T(""),szValue[i],
			                    sizeof(szValue[i])/sizeof(TCHAR),szIniPath);
	}

	return nKeyNum;
}

/* 
   功能:根据exe所在目录,设置配置文件所在目录.

   例如:exe目录:D:\QT\test12\Debug
   设置配置文件所在目录为:D:\QT\test12\Debug\config\11exe.ini
*/
TCHAR strFilePath[MAX_PATH] = {0};
int SetFilePath()
{
	TCHAR strExePath[MAX_PATH] = {0};
	GetModuleFileName(NULL,strExePath,MAX_PATH);

	TCHAR* pszPos = _tcsrchr(strExePath,_T('\\'));
	if(pszPos == NULL)
		return 0;

	*pszPos = 0x0;
	pszPos = strExePath;

	TCHAR* pszRelativePath = _T("\\ImageGrab.ini");

	memset(strFilePath,0x0,sizeof(strFilePath)/sizeof(TCHAR));
	_stprintf(strFilePath,_T("%s%s"),pszPos,pszRelativePath);

	return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int nKeyNum(0);

	TCHAR szBuffer[MAX_PATH] = {0};

	SetFilePath();

	/*
	   获取Section下所有的Key的名字(*第二个参数为NULL*)。
	*/
	unsigned long dwCharacterNum = GetPrivateProfileString(_T("config"),NULL,_T(""),szBuffer,
		                                                   sizeof(szBuffer)/sizeof(TCHAR),strFilePath);

	/*
	  分解出所有的Key值和Key的总个数。
	*/
	nKeyNum = GetKeyName(dwCharacterNum,szBuffer);

	/* 
	    分别获取Key所对应的键值.
		分别保存到szValue中.
	*/
	TCHAR szValue[20][MAX_PATH] = {0};
	int nRet = GetKeyValue(szValue,gKeyName,_T("config"),strFilePath);

	//输出结果
	_tsetlocale(LC_ALL,_T("chs"));
	for (int j = 0;j < nRet;j++)
	{
		_tprintf(_T("%s = "),gKeyName.szKeyBuf[j]);
		_tprintf(_T("%s\n"),szValue[j]);
	}

	return 0;
}

 

发布了402 篇原创文章 · 获赞 121 · 访问量 63万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览