www.pudn.com > Wave_Src_func.zip > SimpleLogFile.cpp


// SimpleLogFile.cpp: implementation of the CSimpleLogFile class. 
// -Vinayak Raghuvamshi 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include  
#include  
#include  
#include "SimpleLogFile.h" 
#include  
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CSimpleLogFile::CSimpleLogFile():m_hFile(NULL),m_nMaxSize(0) 
{ 
 
} 
 
CSimpleLogFile::~CSimpleLogFile() 
{ 
	Reset(); 
} 
 
bool CSimpleLogFile::Initialize(const TCHAR *szFileName, const UINT &nMaxSize,const LoggingLevel &L) 
{ 
	bool bResult = false; 
	 
	try 
	{ 
		if(szFileName) 
		{ 
			SetLogLevel(L); 
 
			Reset(); 
			 
			OpenOrCreateFile(szFileName,m_hFile); 
			 
			m_nMaxSize = nMaxSize; 
			_tcscpy(m_szFileName,szFileName); 
 
			ControlFileSize(); 
			 
			LogMessage(WARNING, _T("\r\n=============================================================\r\n")); 
			WriteTimeStamp(TEXT("Logs Starting from:\r\n")); 
		 
			bResult = true; 
		} 
	} 
	catch(...) 
	{ 
		bResult = false; 
	} 
 
	return bResult; 
} 
 
void CSimpleLogFile::Reset() 
{ 
	try 
	{ 
		ZeroMemory(m_szFileName,sizeof(m_szFileName)); 
		CloseHandle(m_hFile); 
	} 
	catch(...) 
	{ 
		m_hFile = NULL; 
	} 
} 
 
void CSimpleLogFile::GetCurTimeString(_bstr_t &strTime) 
{ 
	struct tm *newtime; 
    time_t long_time; 
	TCHAR szBuf[30] = {0}; 
    time( &long_time );                /* Get time as long integer. */ 
    newtime = localtime( &long_time ); /* Convert to local time. */ 
    _tcscpy(szBuf,asctime( newtime )); 
 
	szBuf[24] = '\r'; 
	szBuf[25] = '\n'; 
	szBuf[26] = '\0'; 
 
	strTime = szBuf; 
} 
 
void CSimpleLogFile::WriteString(const TCHAR *szString) 
{ 
	if((m_hFile)&&(szString)) 
	{ 
		DWORD dwbw = 0; 
		WriteFile(m_hFile,szString,(DWORD) _tcslen(szString) * sizeof(TCHAR),&dwbw,NULL); 
		WriteFile(m_hFile,_T("\r\n"),(DWORD)_tcslen(_T("\r\n")) * sizeof(TCHAR),&dwbw,NULL); 
	} 
} 
 
void CSimpleLogFile::WriteTimeStamp(const TCHAR *szHeader) 
{ 
	_bstr_t strTime; 
	DWORD dwbw = 0; 
 
	GetCurTimeString(strTime); 
	WriteString(strTime); 
	if(szHeader) 
		WriteString(szHeader); 
 
	WriteString(TEXT("-----------------------------------------------------"));	 
} 
 
void CSimpleLogFile::ControlFileSize() 
{ 
	DWORD dwSize = GetFileSize(m_hFile,NULL); 
 
	if(dwSize > m_nMaxSize) 
	{ 
		// delete backup file if present 
		_bstr_t strFileName = m_szFileName; 
		strFileName += _T(".BACKUP.Log"); 
 
		CopyFile(m_szFileName,strFileName,FALSE); 
		 
		// truncate the file. 
		SetEndOfFile(m_hFile); 
	} 
} 
 
void CSimpleLogFile::OpenOrCreateFile(const TCHAR *szFileName,HANDLE &hFile) 
{ 
	WIN32_FIND_DATA ffd = {0}; 
	 
	UINT nFlags = OPEN_EXISTING; 
	 
	if(INVALID_HANDLE_VALUE == FindFirstFile(szFileName,&ffd)) 
		nFlags = CREATE_NEW; 
 
	hFile = CreateFile(	szFileName, 
						GENERIC_READ|GENERIC_WRITE, 
						FILE_SHARE_READ, 
						NULL, 
						nFlags, 
						FILE_ATTRIBUTE_NORMAL, 
						NULL); 
 
	if((NULL == hFile)||(INVALID_HANDLE_VALUE == hFile)) 
		throw; 
 
	SetFilePointer(hFile,0,0,FILE_END); 
} 
 
void CSimpleLogFile::SetLogLevel(const LoggingLevel &L) 
{ 
	m_nLoggingLevel = L; 
} 
 
void CSimpleLogFile::LogMessage(LoggingLevel L, const TCHAR *szString) 
{ 
	if(L <= m_nLoggingLevel) 
		WriteString(szString) ; 
} 
 
void CSimpleLogFile::LogMessageWithTime(LoggingLevel L, const TCHAR *szString) 
{ 
	if(L <= m_nLoggingLevel) 
	{ 
		WriteTimeStamp(szString); 
	} 
}