SW 개발

[파일입출력] 로그파일남기기 (가변인자,unicode) 예제코드

. . . 2009. 4. 14. 00:50
반응형

유니코드 텍스트파일의 첫 해더의 경우 일반 아스키 텍스트파일과 틀리기때문에 약간의 조작? 이 필요함

음.. 좀더 간단하게 고쳐야할 필요성도있지만 일딴 쓰셔되될듯~ ㅎㅎ

예제코드

void UniCodeFileTouch() 
{ 
    HANDLE hFile; 
    hFile = CreateFile(LOG_FILE_PATH , 
                                GENERIC_READ|GENERIC_WRITE,  
                                FILE_SHARE_READ, 0, 
                                CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); 
    if (hFile == NULL) 
        return; 
    TCHAR szTmp[2]; 
    WORD wd = 0xfeff; 
    DWORD dwBytes; 
    memcpy(szTmp, &wd, 2); 
    WriteFile(hFile , szTmp, 2*sizeof(TCHAR), &dwBytes, 0); 
    CloseHandle(hFile); 
}

void DumpMsg( const WCHAR * szFmt , ... ) 
{ 
    static BOOL startFlag = TRUE; 
    HANDLE hFile; 
    va_list arg; 
    DWORD dwBytes; 
    int len; 
    WCHAR szBuf[2048] ={0,}; 
    char pBuf[4096] = {0,}; 

    UniCodeFileTouch(); 

    va_start(arg, szFmt); 
    vswprintf(szBuf, szFmt, arg); 
    va_end(arg); 

    hFile = CreateFile(LOG_FILE_PATH , GENERIC_READ|GENERIC_WRITE, 
                        FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); 
    SetFilePointer(hFile , 0, NULL, FILE_END); 

    len = wcslen(szBuf)*2; 
    WriteFile(hFile , szBuf, len, &dwBytes, 0); 

    CloseHandle(hFile); 
} 

사용법

    DumpMsg(L"      Struct Length    = %d\r\n", pConfig->Configuration.Length);
반응형