Acidpop Software


http://whoim.tistory.com/entry/INI-섹션정보-얻기-GetPrivateProfileSectionNames

처음에는 이분 블로그에서 해당 소스를 보고 사용하였었다..

며칠후에 해당 소스를 보다가.. 문자열이 \0 로 구분되는것에 착안

좀 더 최적화를 해보았다.

기존 코드
	char    szBuf[1024] = {0x00,};   
	char    szSect[512] = {0x00,};   
	DWORD	nCnt = ::GetPrivateProfileSectionNames(szBuf, 1024, strPath);   
	int     nPos = 0;  
	BOOL    bMakedSect = FALSE; // 하나의 섹션을 구성완료하면 TRUE하여 pos를 0으로 초기화
	for(int i=0; i < (int)nCnt; i++, nPos++)   
	{   
		if(szBuf[i] != '\0'){
			if(bMakedSect) nPos = 0;   
			memcpy(szSect + nPos, szBuf+i, 1);   
			bMakedSect = FALSE;   
			continue;   
		}   
		else{   
			szSect[i] = '\0';

			nTemp = m_cbApplication.AddString(szSect);
			
			if( strcmp(m_strSection, szSect) == 0)
			{
				nIdx = nTemp;
			}

			memset(szSect, 0x00, sizeof(szSect));
			bMakedSect = TRUE;   
		}

		nTemp = m_cbApplication.AddString(szSect);

		if( strcmp(m_strSection, szSect) == 0)
		{
			nIdx = nTemp;
		}		
	}






나름대로 최적화 코드

	char    szBuf[1024] = {0x00,};   
	char    szSect[512] = {0x00,};   
	DWORD	nCnt = ::GetPrivateProfileSectionNames(szBuf, 1024, strPath);   
	int     nPos = 0;   
	

	// 2010.08.13 Section 정보 최적화
	for(int i=0; i < (int)nCnt; nPos++)
	{
		strcpy(szSect , szBuf + i);
		i += strlen(szSect) + 1;

		nTemp = m_cbApplication.AddString(szSect);

		if( strcmp(m_strSection, szSect) == 0)
		{
			nIdx = nTemp;
		}
	}