CLogFile::CLogFile() { } CLogFile::~CLogFile() { } //获取文件名称 CString CLogFile::GetFileName() { CString m_sFileName; m_sFileName = CTime::GetCurrentTime().Format("%Y-%m-%d") + _T(".log"); return m_sFileName; } //获取应用程序所在路径 CString CLogFile::GetFilePath() { CString m_FilePath; GetModuleFileName(NULL,m_FilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); m_FilePath.ReleaseBuffer(); int m_iPosIndex; m_iPosIndex = m_FilePath.ReverseFind(_T('\\')); m_FilePath = m_FilePath.Left(m_iPosIndex) + _T("\\Log"); return m_FilePath; } BOOL CLogFile::WriteLog(CString LogText) { try { CFile m_File; CStdioFile m_SFile; CFileFind m_FileFind; CString strLog; CString m_sFileName = GetFileName(); CString m_sFilePath = GetFilePath(); CString strTime = CTime::GetCurrentTime().Format(_T("[%Y-%m-%d %H:%M:%S] ")); /* 格式符号说明 %a —— 星期(缩写英文),如Fri; %A —— 星期(全写英文),如Friday %b —— 月份(缩写英文),如Oct %B —— 月份(全写英文),如 October %c —— 月/日/年 时:分:秒,如 10/13/06 19:17:17 %d —— 日期(1 ~ 31) %H —— 时(24小时制)(0 ~ 23) %I —— 时(12小时制)(0 ~ 12) %j —— 一年当中的第几天,(1 ~ 366) %m —— 月份(数字 1 ~ 12) %M —— 分(0 ~ 59) %p —— 12小时中的A M/PM指示,或者AM,或者PM %S —— 秒(0 ~ 59) %U —— 一年中的第几周,星期日作为每周的第一天(0 ~ 53) %w —— 星期(数字表示,0 ~ 6,0代表星期日) %W —— 一年中的第几周,星期一作为每周的第一天(0 ~ 53) %x —— 月/日/年,%c的前半段 */ //组合写入字符串 strLog += strTime; strLog += LogText; if(!m_FileFind.FindFile(m_sFilePath)) { CreateDirectory(m_sFilePath,NULL); } if(!m_SFile.Open(m_sFilePath + _T("\\") +m_sFileName,CFile::modeReadWrite)) { m_SFile.Open(m_sFilePath + _T("\\") + m_sFileName,CFile::modeCreate | CFile::modeReadWrite | CFile::typeBinary); } m_SFile.SeekToEnd(); //written by jiftle 处理UNICODE下乱码 #ifdef UNICODE CString strTmp = strLog; int len = 0; char *buf = NULL; len = WideCharToMultiByte(CP_ACP,0,strTmp,strTmp.GetLength(),NULL,0,NULL,NULL)+1; buf = new char[len]; memset(buf,0,len); WideCharToMultiByte(CP_ACP,0,strTmp,strTmp.GetLength(),buf,len-1,NULL,NULL); #else CString strTmp = strLog; char *buf = NULL; int len=0; len = strTmp.GetLength()+1;//多分配一个存放结束符号 buf = new char[len]; memset(buf,0,len); buf=strTmp.GetBuffer(); #endif m_SFile.Write(buf,strlen(buf)); m_SFile.Close(); } catch(CFileException fileException) { return false; } return true; }
在头文件中加入如下
class CLogFile { public: CLogFile(); virtual ~CLogFile(); static CString GetFileName(); static CString GetFilePath(); static BOOL WriteLog(CString LogText); };
本文出自:http://blog.weka.cc/cpp/vc-log/