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