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;
		}
	}

  • 장석태 2010.12.31 15:32 신고

    오호 최적화 괜춘하네요 님 ㅋㅋ

  • Seo 2013.05.15 13:29 신고

    char *p = szBuf;
    while(nCnt > 0){
    nPos = strlen(szBuf) + 1;
    p += nPos;
    nCnt -= nPos;
    std::cout << "Session Name = " << p << std::endl
    }

    이게 더 빠르겠네요 ^^ 참고 하다가 한번 남겨 놓습니다.

  • 2018.03.08 10:14

    비밀댓글입니다

    1. BlogIcon Acidpop acidpop 2018.03.08 10:49 신고

      안녕하세요
      char 로 선언한 szSect 를

      TCHAR szSect 형태로 선언을 해주시고

      strcpy, strlen, strcmp 를

      _tcscpy, _tcslen, _tcscmp 로 변경 해서 사용하시면 됩니다.

      이런 복잡한 과정이 싫으시다면

      AddString을 AddStringA 로 변경해보세요.

      상세한 내용은 char, TCHAR 차이를 공부 하시면 좋을것 같습니다.

다른 카테고리의 글 목록

Programming/MFC 카테고리의 포스트 목록