// stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다. // ReveiwHistory.pch는 미리 컴파일된 헤더가 됩니다. // stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다. #include "stdafx.h" CCriticalSection g_criticalExe; CCriticalSection g_criticalLog; CString GetExePath() { g_criticalExe.Lock(); static TCHAR pBuf[256] = { 0, }; memset(pBuf, NULL, sizeof(pBuf)); if (AfxGetApp()) GetModuleFileName(AfxGetApp()->m_hInstance, pBuf, sizeof(pBuf)); else GetModuleFileName(NULL, pBuf, sizeof(pBuf)); CString strFilePath; strFilePath.Format(_T("%s"), pBuf); strFilePath = strFilePath.Left(strFilePath.ReverseFind(_T('\\'))); g_criticalExe.Unlock(); return strFilePath.GetString(); } void LOG(int nType, const char* fmt, ...) { g_criticalLog.Lock(); static _TCHAR szLog[5096]; FILE* fp = NULL; CTime tm = CTime::GetCurrentTime(); CString strLog = _T(""); CString strPath = _T(""); va_list args; SYSTEMTIME cur_time; if (fmt == NULL) { g_criticalLog.Unlock(); return; } ZeroMemory(szLog, 5096); va_start(args, fmt); wvsprintf(szLog, fmt, args); va_end(args); strPath.Format("%s\\Log\\%s", GetExePath(), tm.Format("%Y_%m_%d_%H.log").GetString()); fopen_s(&fp, (LPSTR)(LPCSTR)strPath, "a+"); GetLocalTime(&cur_time); strLog.Format("%04d-%02d-%02d %02d:%02d:%02d:%03ld : ", cur_time.wYear, cur_time.wMonth, cur_time.wDay, cur_time.wHour, cur_time.wMinute, cur_time.wSecond, cur_time.wMilliseconds); if (fp != NULL) { switch (nType) { case Normal: strLog += _T("[NORMAL ] : "); break; case Dbg: strLog += _T("[DEBUG ] : "); break; case Operation: strLog += _T("[OPERATION ] : "); break; case Err: strLog += _T("[ERROR ] : "); break; } strLog += szLog; fprintf(fp, "%s\r\n", (LPSTR)(LPCSTR)strLog); fflush(fp); fclose(fp); } g_criticalLog.Unlock(); } void INIWriteStr(CString strAppName, CString strKeyName, CString strValue, CString strFilePath) { WritePrivateProfileString(strAppName, strKeyName, strValue, strFilePath); } CString INIReadStr(CString strAppName, CString strKeyName, CString strFilePath) { TCHAR szReturnString[1024] = { 0, }; memset(szReturnString, NULL, 1024); GetPrivateProfileString(strAppName, strKeyName, _T(""), szReturnString, 1024, strFilePath); CString str; str.Format(_T("%s"), szReturnString); return str; } void INIWriteInt(CString strAppName, CString strKeyName, int nValue, CString strFilePath) { CString str; str.Format(_T("%d"), nValue); WritePrivateProfileString(strAppName, strKeyName, str, strFilePath); } int INIReadInt(CString strAppName, CString strKeyName, CString strFilePath) { TCHAR szReturnString[1024] = { 0, }; memset(szReturnString, NULL, 1024); GetPrivateProfileString(strAppName, strKeyName, _T(""), szReturnString, 1024, strFilePath); int nRet = atoi(szReturnString); return nRet; }