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